Следующие будут удалены все созданные строки в обратной хронологической последовательности.
Graphics g;
Pen p;
Bitmap bmp;
List<Point> Lines = new List<Point>();
private void Form2_Load(object sender, EventArgs e)
{
bmp = new Bitmap(Width, Height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
BackgroundImage = bmp;
g = Graphics.FromImage(BackgroundImage);
g.Clear(Color.DeepSkyBlue); //This is our backcolor
}
private void btnLine1_Click(object sender, EventArgs e)
{
Point A = new Point(50, 50);
Point B = new Point(100, 50);
p = new Pen(Color.Red);
g.DrawLine(p, A, B); //Use whatever method to draw your line
Lines.Add(A); //Grab the first point; add to list
Lines.Add(B); //Grab the second point; add to list
Refresh(); //Refresh drawing to bitmap.
}
private void btnDrawLine2_Click(object sender, EventArgs e)
{
Point A = new Point(50, 60);
Point B = new Point(100, 60);
p = new Pen(Color.White);
g.DrawLine(p, A, B); //Same logic as above
Lines.Add(A);
Lines.Add(B);
Refresh();
}
private void btnUndo_Click(object sender, EventArgs e)
{
c = new Pen(Color.DeepSkyBlue);
r = new Pen(lastColor.ElementAt(lastColor.Count - 2));
try
{
g.DrawLine(c, Lines.ElementAt(Lines.Count - 2), Lines.ElementAt(Lines.Count - 1));
Lines.RemoveAt(Lines.Count - 2);
Lines.RemoveAt(Lines.Count - 1);
for (int i = Lines.Count; i > 0; i--)
{
g.DrawLine(r, Lines.ElementAt(Lines.Count - 2), Lines.ElementAt(Lines.Count - 1));
}
}
catch { }
Refresh();
}
Вот 2 линии бок о бок:

Вот 2 строки перекрывающихся:

* Не забудьте утилизировать свои графические объекты!
Не используйте CreateGraphics !! –
Единственный способ удалить строку, которую вы хотите удалить, из __ списка строк, которые вы рисуете. Всегда рисуйте все фигуры за один раз в событии рисования. Если у вас нет такого списка фигур, который вы хотите нарисовать, тогда вы должны иметь. Вы нуждаетесь в этом. Поверь нам. Игнорируйте все глупые советы, в которых говорится, что другие мудрые, из ужасного вступления MSDN на рисунок, к сожалению, вводящую в заблуждение аналогию с «линией, нарисованной на бумаге». Это совсем не похоже. На самом деле это совершенно другое !!! – TaW
Возможно, вы захотите изучить [этот пост] (http://stackoverflow.com/questions/32408229/select-drawn-figure-within-panel-box/32422295#32422295). - Короткий ответ: вы не __have__ линии, вы просто цветные пиксели. И: __Вы не можете разрисовать пиксель__, поэтому вам нужно воссоздать весь рисунок. Звучит безумно и расточительно, но это единственный способ пойти и на самом деле работает ослепительно быстро. – TaW