我一直在寻找一段时间,并没有找到一个简单或正确的方法来解决以下问题.
我有一个多行TextBox ShortcutsEnabled = true
,当然,它允许用户轻松撤消或重做使用键盘快捷键(例如Ctrl+ Z)所做的任何更改.
现在我希望实现一个清除TextBox文本但仍允许用户使用默认撤消功能撤消操作的按钮.
清除TextBox中的文本很简单:
myTextBox.Clear();
//or
myTextBox.Text = string.Empty;
Run Code Online (Sandbox Code Playgroud)
问题是当以这些方式替换文本时,默认撤消功能不起作用.
但是,如果用户选择所有文本(Ctrl+ A)并Delete手动命中,则TextBox将变为空,用户仍可以通过Ctrl+ 恢复已删除的数据Z.
我知道编写自己的实现Undo
或者Redo
可能会让我获得理想的结果,但必须采用另一种方式.
我只需要巧妙地模仿代码中手动选择all和delete方法.
这是我需要帮助的地方,我该如何实现呢?
TextBox似乎没有我可以调用的默认删除,删除或替换文本功能.
作为一个概念证明,我尝试使用Cut
方法(或Ctrl+ X)来实现它,它实际上做了我想要的.唯一的缺点是,它取代了潜在重要的剪贴板数据.我也尝试过这方面的解决方法,但在做了一些研究后,似乎没有任何"正确"或至少"很好"的方法来恢复剪贴板数据.
var cbData = Clipboard.GetText();
myTextBox.SelectAll();
myTextBox.Cut();
Clipboard.Clear();
if(!string.IsNullOrEmpty(cbData))
Clipboard.SetText(cbData);
Run Code Online (Sandbox Code Playgroud)
TLDR;
如何以与用户手动相同的方式从代码中删除TextBox中的文本?那么Undo
仍然可以调用默认方法来恢复已删除的文本?
Fᴀʀ*_*ɴᴀᴍ 10
如何聚焦TextBox,选择所有文本然后模拟退格?它与用户手动清除TextBox相同.(至少,我以这种方式清除文本字段)
textBox1.Focus();
textBox1.SelectAll();
SendKeys.Send("{BACKSPACE}");
Run Code Online (Sandbox Code Playgroud)
一些部分相关的事实 - 在WPF中,无论您如何更改文本,Undo和Redo方法始终都能正常运行.
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |