我正在尝试创建一个带有撤销和重做功能的简单绘图应用程序。我认为可以将您正在绘制的内容添加到列表中,然后调用该列表来绘制所有内容。然后,撤消应该只会删除最后添加的项目并重新绘制所有内容。问题是,我如何将我所绘制的内容添加到列表中,并使用该列表进行撤消操作?
我正在使用位图重绘方法。 这是我绘制的方法:
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.
}
List<T>
中收集你所绘制的坐标。有关如何收集它们的代码,请参见我的这里的评论!另外:你的绘图方式不正确。你似乎缓存了一个 Graphics 对象。这是错误的!请在 Paint 事件中绘制所有内容! - TaWcurves.Remove(curves.Last)); pnlMain.Invalidate();
。 - TaW