Как отменить PictureBox Drawline C# окна формы с помощью Microsoft Visual Studio
И пытаюсь заставить работать маленькое приложение рисования, которое рисует только линии с событием мыши.
Может ли кто-нибудь предоставить мне правильный рабочий пример, как создать функцию отмены? У меня есть picturebox1 с событиями pictureBox1_MouseDown, pictureBox1_MouseMove, pictureBox1_MouseUp.
Когда я двигаю мышь и нажимаю на графическое окно, она рисует линии, как и ожидалось. Но как создать функцию отмены, например, по нажатию кнопки отмены?
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
lx = e.X;
ly = e.Y;
Graphics g = pictureBox1.CreateGraphics();
g.DrawLine(new Pen(new SolidBrush(paintcolor), 3), new Point(x, y), new Point(lx, ly));
this.Invalidate();
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
x = e.X;
y = e.Y;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
}
Я создаю дополнительно
class Shape
{
public string _font { get; set; }
public string g { get; set; }
public int x { get; set; }
public int y { get; set; }
public int lx { get; set; }
public int ly { get; set; }
public string paintcolor { get; set; }
public string s { get; set; }
}
затем добавляется в публичный частичный класс Form1: Form
private Stack<Shape> _shapes = new Stack<Shape>();
чем добавить в картинку Box1_MouseUp
newShape._font = _font.ToString();
newShape.g = g.ToString();
newShape.x = x;
newShape.y = y;
newShape.lx = lx;
newShape.ly = ly;
newShape.paintcolor = paintcolor.ToString();
_shapes.Push(newShape);
this.Invalidate();
и для кнопки отмены btnUndo
private void btnUndo_Click(object sender, EventArgs e)
{
if (_shapes.Count > 0)
{
this.pictureBox1.Invalidate();
_shapes.Pop();
}
else
{
MessageBox.Show("Nothing to remove.", "No Shapes",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
и установите точку останова на _shapes.Push(newShape);
что _shapes хранятся со значениями
и когда я нажимаю кнопку btnUndo
Я вижу, что _shapes.Pop(); убрав значения LIFO, но конечно мои строки не пропадают. Так что я запутался, потому что у меня такое чувство, что мне нужно создавать линии на pictureBox1 не от движений мыши, а от стека.