有没有办法为 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 【问题描述】:我对@987654328@ 很困惑,因为我习惯使用RichTextBox
(我决定切换,因为它看起来更快..)而且我有一个问题:
TextBox
与RichTextBox
不同,似乎根本没有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() 中,通过SendMessage
以EM_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#的主要内容,如果未能解决你的问题,请参考以下文章
为 .NET TextBox 捕获 MouseDown 事件
关于验证,当checkbox某项选中时textbox不能为空!