我遇到了一些我无法解决的问题。
当鼠标停止时,我将位图添加到它
List<Image> ChangeHistory = new List<Image>();
int ChangeHistoryIndex = 0;
private void canvas_MouseDown(object sender, MouseEventArgs e)
{
ChangeHistoryIndex = ChangeHistory.Count - 1;
if (canvas.Image != null)
{
ChangeHistory.Add(canvas.Image);
}
MouseIsDown = true;
}
这是撤消按钮事件,如果点击了ChangeHistory中的所有项目都是相同的。
private void Undo_Click(object sender, EventArgs e)
{
ChangeHistoryIndex--;
if(ChangeHistoryIndex != 0)
{
canvas.Image = ChangeHistory[ChangeHistoryIndex];
}
}
我真的无法理解。
感谢。
答案 0 :(得分:1)
您应该在使用列表后更改索引。
private void Undo_Click(object sender, EventArgs e)
{
if(ChangeHistoryIndex != -1)
{
canvas.Image = ChangeHistory[ChangeHistoryIndex];
}
ChangeHistoryIndex--;
}
编辑:您还应该在另一种方法中指定ChangeHistoryIndex:
private void canvas_MouseDown(object sender, MouseEventArgs e)
{
if (canvas.Image != null)
{
ChangeHistory.Add(canvas.Image);
}
ChangeHistoryIndex = ChangeHistory.Count - 1;
MouseIsDown = true;
}
编辑:您正在实现堆栈结构。所以你可以使用Stack而不是List:
Stack<Image> ChangeHistory = new Stack<Image>();
并在您的活动中使用Push
和Pop
方法,如下所示:
private void canvas_MouseDown(object sender, MouseEventArgs e)
{
if (canvas.Image != null)
ChangeHistory.Push(canvas.Image);
MouseIsDown = true;
}
private void Undo_Click(object sender, EventArgs e)
{
if (ChangeHistory.Count > 0)
canvas.Image = ChangeHistory.Pop();
else
canvas.Image = null;
}