C# 列表的最后一项正在覆盖
我有点搞不懂 当鼠标按下时,我将位图添加到其中C# 列表的最后一项正在覆盖,c#,image,list,overwrite,C#,Image,List,Overwrite,我有点搞不懂 当鼠标按下时,我将位图添加到其中 List<Image> ChangeHistory = new List<Image>(); int ChangeHistoryIndex = 0; private void canvas_MouseDown(object sender, MouseEventArgs e) { ChangeHistoryIndex = ChangeHistory.Count - 1; if (canvas.Image !
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;
}
我真的搞不懂
谢谢。您应该在使用列表后更改索引
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<Image> ChangeHistory = new Stack<Image>();
在鼠标向下添加图像后,应更改ChangeHistoryIndex。旁注:撤消堆栈应通过深度克隆或操作重播来实现。使用
列表添加对活动对象的引用。添加将不起作用。谢谢,但这不会有帮助。您还应该在另一个方法中分配ChangeHistoryIndex。您成功了吗?
Stack<Image> ChangeHistory = new Stack<Image>();
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;
}