Zeichne mehrere Freihand-Polylinien oder -Kurven - Hinzufügen eines Rückgängig-Features

Ich versuche, eine einfache Zeichenanwendung mit Funktionen zum Rückgängigmachen und Wiederherstellen zu erstellen. Ich gehe davon aus, dass Sie das, was Sie zeichnen, zu einer Liste hinzufügen und die Liste aufrufen können, um alles zu zeichnen. Das Rückgängigmachen sollte dann nur das zuletzt hinzugefügte Element entfernen und alles erneut zeichnen. Das Problem ist, wie füge ich das, was ich gezeichnet habe, in eine Liste ein und verwende diese Liste zum Rückgängigmachen?

Ich verwende die Bitmap-Neuzeichnungsmethode. So zeichne ich:

    Point start, end;
    bool painting;
    private List<PointF> myPoints = new List<PointF>();

    private void pnlMain_MouseDown(object sender, MouseEventArgs e)
    {
        start = e.Location;
        painting = true;
    }

    private void pnlMain_MouseUp(object sender, MouseEventArgs e)
    {
        painting = false;
    }

    private void pnlMain_MouseMove(object sender, MouseEventArgs e)
    {
        if (painting == true)
        {
            end = e.Location;
            g.DrawLine(p, start, end);
            myPoints.Add(e.Location);
            pnlMain.Refresh();
            start = end;
        }
    }

    private void btnUndo_Click(object sender, EventArgs e)
    {
        g.Clear(cldFill.Color);
        if (myPoints.Count > 2)
        {
            myPoints.RemoveAt(myPoints.Count - 1);
            g.DrawCurve(p, myPoints.ToArray());
        }
        pnlMain.Refresh();
        //This works but you have to spam it to get rid of
        //a line and does some weird connections.
    }

Antworten auf die Frage(2)

Ihre Antwort auf die Frage