有没有办法为 TextBox 实现 Redo() 函数? C#

Posted

技术标签:

【中文标题】有没有办法为 TextBox 实现 Redo() 函数? C#【英文标题】:Is there a way to implement a Redo() function for TextBox? 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 是否允许用于商业用途?我打算自己写,但我想知道:) 【参考方案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 控件

以上是关于有没有办法为 TextBox 实现 Redo() 函数? C#的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在uwp应用程序中更改TextBox的行高?

为 .NET TextBox 捕获 MouseDown 事件

关于验证,当checkbox某项选中时textbox不能为空!

C# 怎么改变Textbox的边框颜色?Winform

c# winformz中 textbox 控件 文字如何垂直居中?

online redo log 和undo各有啥作用