我想在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