我尝试在我的Windows窗体应用程序中实现重做撤消。
我建立了一个链表,列表中的每个输入都是一个保存表单中所有元素状态的类。
每次单击“保存”按钮,将此表单的最后一个状态插入此列表。
当用户点击撤销按钮时,我想获得列表的输入(一个在最后一个之前) 并加载它。
我不知道在链接列表的元素之前获取这个的简单方法是什么?
我的代码如下所示:
public class SaveState {
public int comboBox1;
public int comboBox2;
..........
public SaveState() {
.......
}
}
LinkedList<SaveState> RedoUndo = new LinkedList<SaveState>();
# in save function
var this_state = new SaveState();
this_state = getAllState();
RedoUndo.AddLast(this_state);
# when click undo
var cur_state = new SaveState();
# this lines dont work !!!!!!!!!
int get = RedoUndo.Count - 1;
cur_state = RedoUndo.Find(get);
setAllState(cur_state);
答案 0 :(得分:5)
您可以通过LinkedList<T>.Last
// list is LinkedList<T> for some T
var last = list.Last;
和倒数第二个节点通过LinkedListNode<T>.Previous
var penultimate = last.Previous; // or list.Last.Previous;
请注意,这是LinkedListNode<T>
,您需要使用LinkedListNode<T>.Value
属性获取T
的基础实例。
当然,您应该注意检查list
是否为空,list.Last
不为空(如果是空列表),并且list.Last.Previous
不是null(在单元素列表的情况下)。
答案 1 :(得分:1)
@Haim,你可能想查看Krill Osenkov的Undo Framework。它使撤消/重做非常容易。