![](/img/trans.png)
[英]How to implement good and efficient undo/redo functionality for a TextBox
[英]How to implement undo functionality?
在我的应用程序中,我想为用户提供一个小的撤消功能。 用户没有多少动作可以撤消。 特别是行动是:
现在我想到了如何实现这一点。 我首先想到的是一个Action类,它是用户可以采取的3种不同操作的抽象基类。 每次用户执行这些操作时,都会创建此抽象Action类的子类的新适当实例,并将其插入包含所有操作的列表中。
每当用户想要撤消某些内容时,该列表将显示给用户,并且他可以选择要撤消的操作。
现在我在想什么必须存储在这样的动作对象中:
我不确定这是否足够。 我还考虑过按时间顺序排序,但这应该是必要的,因为列表可以按时间顺序保持正确。
还有其他我应该考虑的事情吗?
你可以做这样简单的事情:
Stack<Action> undoStack = new Stack<Action>();
void ChangeColor(Color color)
{
var original = this.Object.Color;
undoStack.Push(() => this.Object.Color = original);
this.Object.Color = color;
}
您应该为要撤消的每个操作实现命令模式 :
一切似乎都是正确的,但我宁愿使用堆栈而不是列表。 它在时间顺序方面很有用。
对于UNDO功能的正确和经过验证的实现是命令模式
在向现有项目添加撤消/重做功能时,很难忽略这个Simple-Undo-redo-library-for-Csharp-NET 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.