为了实现Undo和Redo,必须要在程序中保存起程序的运行状态,从而能够在Undo时跳转到前一个状态和在Redo时跳转到下一个状态。为了实现状态的维护,我采用了两个栈来分别保存Undo操作的状态和Redo操作的状态。
public static Stack<MyCommand> undoStack = new Stack<MyCommand>();
public static Stack<MyCommand> redoStack = new Stack<MyCommand>();
首先要识别哪些操作可以支持Undo和Redo操作。在我的小程序中,支持的操作主要有几个:textbox的textchanged,textbox和button的焦点,radiobutton、checkbox、combox、listbox选项的改变。
对于上述操作的实现,必须要实现一个MyCommand接口。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace UndoRedo
{
public interface MyCommand
{
void execute(); //完成动作
void undo(); //撤销动作
}
}
每个操作都要继承自这个MyCommand接口,在操作类中包含有实现Undo和Redo操作所需要的属性,并且实现了接口中的execute()和undo() <