gpt4 book ai didi

c# - 如何清除 TextBox 以便默认的 Undo 方法仍然有效?

转载 作者:太空狗 更新时间:2023-10-29 17:39:02 32 4
gpt4 key购买 nike

我一直在寻找一段时间,但没有找到解决以下问题的简单或正确的方法。

我有一个带有 ShortcutsEnabled = true 的多行文本框,当然,它允许用户轻松撤消或重做使用键盘快捷键(例如 Ctrl + Z).
现在我想实现一个按钮来清除 TextBox 的文本,但仍允许用户使用默认的撤消功能撤消操作。

清除 TextBox 中的文本很容易:

myTextBox.Clear();  
//or
myTextBox.Text = string.Empty;

问题是默认的撤消功能在用这些方法替换文本时不起作用。
但是,如果用户选择所有文本 ( Ctrl + A ) 并手动点击 Delete ,文本框变为空,用户仍然可以恢复Ctrl + Z 删除的数据。

我知道自己编写 UndoRedo 的实现可能会让我得到想要的结果,但必须有另一种方法。
我只需要能够在代码中模仿手动全选和删除方法。

这正是我需要帮助的地方,我该如何实现呢?

TextBox 似乎没有我可以调用的默认删除删除替换 文本函数。
作为概念证明,我尝试使用 Cut 方法(或 Ctrl + X )来实现它,这实际上是我想要的。唯一的缺点是这会替换可能重要的剪贴板数据。我也尝试过为此想出一个解决方法,但在做了一些研究后,似乎没有任何“正确”或至少“好”的方法来恢复剪贴板数据。

var cbData = Clipboard.GetText();
myTextBox.SelectAll();
myTextBox.Cut();
Clipboard.Clear();
if(!string.IsNullOrEmpty(cbData))
Clipboard.SetText(cbData);

TLDR;

如何像用户手动执行的操作一样在代码中从 TextBox 中删除文本?这样默认的Undo方法仍然可以调用来恢复被删除的文本?

最佳答案

如何聚焦 TextBox,选择所有文本然后模拟退格键?这与用户手动清除文本框是一样的。 (至少,我以这种方式清除文本字段)

textBox1.Focus();
textBox1.SelectAll();
SendKeys.Send("{BACKSPACE}");

一些部分相关的事实 - 在 WPF 中,无论您如何更改文本,UndoRedo 方法始终正常运行.

关于c# - 如何清除 TextBox 以便默认的 Undo 方法仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34091319/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com