c# - 如何为 TextBox 实现良好且高效的撤消/重做功能

标签 c# undo-redo memento

我有一个文本框,我想为其实现撤消/重做功能。我 have read它可能已经有一些轻微的撤消功能,但它是错误的?无论如何,我想同时实现撤消和重做功能,只是为了了解您将如何继续这样做。

我已经阅读了 Memento Pattern并在 Generic Undo/Redo 上看了一些CodeProject 上的示例。这种模式很有意义。我似乎无法全神贯注于如何实现它。以及如何有效地处理 TextBox 的内容。

当然,当 TextChanges 时,我可以只存储 textbox.Text,但这会很快占用大量内存,尤其是 TextBox 包含很多文本。

所以无论如何,我正在寻找一些关于如何以良好、清晰和有效的方式实现此功能的建议。一般而言,尤其是对于 TextBox c",)

最佳答案

.NET System.ComponentModel 命名空间带有一个 IEditableObject 接口(interface),您也可以使用 INotifyPropertyChangingINotifyPropertyChanged。 MVC 模式还可以让您的界面通过事件响应模型中的更改,从而更新或恢复文本框的值。

实际上是 Memento 模式

你看过这些吗? Here是一个方法。

一个简单快捷的版本是存储文本框 OnTextChanged 的状态。每次撤消都会返回数组中的最后一个事件。 C# 堆栈类型在这里会很方便。您也可以在离开界面后或在 Apply 之后清除状态。

关于c# - 如何为 TextBox 实现良好且高效的撤消/重做功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597792/

相关文章:

c# - 在 C# 中读取 PVOID,我应该读取多少位?

c# - 上下文操作菜单项在 iOS PCL 项目中不起作用

c# - MigraDoc C# 在同一行左右对齐

java - Java 中的撤消和重做实现

design-patterns - 对对象进行版本控制的设计模式有哪些?

javascript - Jquery 表单 : using the memento pattern to build a dirty form notification system - exisitng patterns?

c# - Kendo UI 输入焦点 - 选择和 Ajax 调用后,DropdownList 保留焦点

Java - 无法收集 vector 内的二维数组

javascript - HTML 注释(选择、突出显示、删除格式)

.net - .NET 上的纪念品实现