我想在C#(treeview组件)中实现树的节点的撤销/重做功能。我已经使用了纪念图案,但是我在重做部分遇到问题。我看不出我的逻辑有瑕疵。下面是删除,我呼吁其创建表示当前状态的新的备忘录对象SaveMemento()方法的一个节点之前的代码撤销/重做纪念图案c#
private List<Memento> _mementoStateList= new List<Memento>();
private List<Memento> _undoStateList= new List<Memento>();
public Memento Memento { get{return null;}
set{_mementoStateList.Add(value);} }
public Memento Undo()
{
if (!_mementoStateList.Any()) return null;
Memento m = _mementoStateList.Last();
_undoStateList.Add(m);
_mementoStateList.Remove(m);
return m;
}
public Memento Redo()
{
if (!_undoStateList.Any()) return null;
Memento m = _undoStateList.Last();
_mementoStateList.Add(m);
_undoStateList.Remove(m);
return m;
}
在我的形式,一些卡扣。该对象被添加到_mementoStateList。
当撤消和重做动作时,我调用上面的Undo()和Redo()方法。
我假设我没有在正确的时刻保存状态? 任何输入是高度赞赏!
当你设置一个新的纪念品,你应该重置你的撤消状态列表...否则,该列表可能会得到一个非常奇怪的内容是某些用例。 – JHBonarius