如何在不重大程序更改的情况下实现撤消/重做操作

时间:2010-10-19 23:16:04

标签: c# undo undo-redo redo

您好 我即将为我正在编写的应用程序添加新功能。我需要写一个undo / redo功能。但是,我们90%的应用程序已经准备就绪,我不知道在没有已经创建的代码(太多)的情况下实现此功能的最佳方法是什么。

5 个答案:

答案 0 :(得分:8)

这里的细节不多。但是,撤消/重做功能通常通过Command Pattern的某些变体来处理。根据您的体系结构,这可以简单地将您的基本功能重新编写为“命令”或重大改造。

答案 1 :(得分:7)

正如 Reed Copsey 所说,实现do / redo的最常见模式是 Command Pattern 。基本思想是将操作实现为实现某些接口的命令:

public interface ICommand  { public void Execute(); public void Undo(); }

然后你有一个类(Control)作为一个整体执行所有命令,这样的类必须由一组命令组成,当你执行命令时,每个命令被推入一个堆栈内(通过{{ 1}}方法),如果要撤消操作,则从堆栈中取出每个元素(通过push())并执行其pop()方法。

Undo()

注意:这是一个非常简单的代码,仅用于尝试澄清命令模式背后的想法。

link text

答案 2 :(得分:0)

几个问题:撤消有什么作用?它会撤消所有更改还是仅撤消最后一个更改?

在任何情况下,您将首先存储输入字段的状态(初始状态或最后所需位置),然后撤消按钮将采用该状态并将其应用于字段。

重做将是相同的概念,但它会存储撤消之前的状态。

答案 3 :(得分:0)

你需要一个撤销/重做堆栈,并进行重大更改以使一切都知道这个堆栈..我很抱歉,但魔法不存在:/

答案 4 :(得分:0)

Rockford Lhotka为Business Objects编写了一个free library,其中包含内置的撤消/重做功能。我认为他甚至通过界面来实现它,所以它应该是“微创的”。

相关问题