我尝试在我的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);
Run Code Online (Sandbox Code Playgroud)
您可以通过最后一个节点获取 LinkedList<T>.Last
// list is LinkedList<T> for some T
var last = list.Last;
Run Code Online (Sandbox Code Playgroud)
和倒数第二个节点 LinkedListNode<T>.Previous
var penultimate = last.Previous; // or list.Last.Previous;
Run Code Online (Sandbox Code Playgroud)
请注意,这是一个LinkedListNode<T>
并且您需要使用LinkedListNode<T>.Value
属性获取底层实例T
.
当然,您应该注意检查它list
不是null,并且list.Last
不是null(在空列表的情况下),并且list.Last.Previous
不是null(在单元素列表的情况下).