Я пытаюсь создать простое приложение для рисования с функциями отмены и повтора. Я предполагаю, что вы можете добавить то, что вы рисуете, в список и вызвать список, чтобы нарисовать все. Затем отмена должна просто удалить последний добавленный элемент и перерисовать все заново. Проблема в том, как мне добавить то, что я нарисовал, в список и использовать этот список для отмены?
Я использую метод перерисовки растрового изображения. Вот как я рисую:
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.
}
Shape
, содержащий абстрактный методDraw
и некоторые производные классы, такие какRectangle
иCircle
, реализующие метод и содержащие необходимые свойства для координат. Затем вы можете использоватьList<Shape>
для хранения объектов, которые хотите нарисовать. Чтобы нарисовать фигуру, у вас должен быть флажок, указывающий, какую фигуру вы рисуете, и, основываясь на этом флаге, добавьте нужную фигуру в этот список. Чтобы нарисовать их, в методеOnPaint
вызовите методDraw
каждой фигуры. 11.07.2016