【问题标题】:Is there a way to implement a Redo() function for TextBox? C#有没有办法为 TextBox 实现 Redo() 函数? C#
【发布时间】:2021-04-21 01:51:15
【问题描述】:

我对@9​​87654328@ 很困惑,因为我习惯使用RichTextBox(我决定切换,因为它看起来更快..)而且我有一个问题:

TextBoxRichTextBox 不同,似乎根本没有textBox.Redo(); 功能。有没有办法为TextBox 实现一个.Redo() 函数,还是不可能?

感谢您的宝贵时间!

【问题讨论】:

  • EM_UNDO 消息 + EM_CANUNDO 消息等
  • Memento Pattern。您通常从以下内容开始:IEditableObject Interface。这定义了基本实现。 (RichTextBox 控件始终可用 - 也是商业产品,但您可以尝试Fast Colored TextBox:您可以在此处找到它的不同实现和问题)
  • 最佳适用于哪些用例? -- 试试那个开源控件,它基于标准的 RichTextBox。
  • 从 GitHub 获取它:FastColoredTextBox。请注意,您可以将其作为 NuGet Package 添加到项目中
  • Fast Colored TextBox 是否允许用于商业用途?我打算自己写,但我想知道:)

标签: c# .net winforms textbox


【解决方案1】:

TextBoxBase.Undo() 中,通过SendMessageEM_UNDO 作为消息进行呼叫。

the docs 中,对于EM_UNDO,我们可以看到以下内容:

编辑控件和 Rich Edit 1.0:撤消操作也可以撤消。例如,您可以使用第一个 EM_UNDO 消息恢复已删除的文本,并使用第二个 EM_UNDO 消息再次删除该文本,只要没有干预编辑操作即可。

所以再次调用Undo() 将重做。

【讨论】:

  • 所以,对于Redo 按钮,我只需输入textBox.Undo();?喜欢实际的Undo 按钮吗?或者我错过了什么:D
  • 确实如此。您实际上可以在 Notepad.exe 中看到这一点,它在内部使用 Edit 控件
猜你喜欢
  • 2010-10-09
  • 1970-01-01
  • 2011-05-22
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
相关资源
最近更新 更多