Как отменить 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 не от движений мыши, а от стека.

0 ответов

Другие вопросы по тегам