winforms文本框Ctrl-Backspace删除整个单词&空间

时间:2012-07-03 05:08:36

标签: winforms textbox backspace ctrl

我在这里找到了一篇文章:

Winforms Textbox - Using Ctrl-Backspace to Delete Whole Word

在按住ctrl + backspace的同时删除文本框中的整个单词,但我注意到如果你没有像这样实现app.config修改:

<configuration>
  <appSettings>
    <add key="SendKeys" value="SendInput" />
  </appSettings>
</configuration>

只会删除当前单词,并且会中断退格过程。例如,如果我输入“Tim tom”然后使用ctrl + backspace技巧,“tom”将被删除,中断任何退格操作并离开“Tom”。

如果你使用app.config修改,但是,“tom”将被成功删除,退格操作将继续,但不会继续删除整个单词,就好像你只是持有退格按钮。

是否有人知道导致此问题的原因或解决方法?

1 个答案:

答案 0 :(得分:0)

您的应用程序正在选择向应用程序发送按键等效项的不同行为。

here

解释了为什么存在这两个协议的历史说明
  

已针对.NET Framework 3.0更新了SendKeys类   使其可以在Windows Vista上运行的应用程序中使用。增强   Windows Vista的安全性(称为用户帐户控制或UAC)   阻止先前的实现按预期工作。该   SendKeys类很容易受到时间问题的影响,一些开发人员   不得不解决。更新的实施仍然是   易受时间问题影响,但速度稍快,可能需要   改变了解决方法。 SendKeys类尝试使用   先前的实现,如果失败,则使用新的   实现。因此,SendKeys类可能表现不同   在不同的操作系统上。另外,当SendKeys类时   使用新的实现,SendWait方法不会等待   将消息发送到另一个进程时要处理的消息。

此处提到的时间问题尤其涉及通过字符继续控制应用程序,而不是一次只控制一个字符。它们包括

  • 难以同步打字率
  • 确保在应用程序打开对话框时右侧窗口收到输入
  • 确保正确的应用即使用户使用关闭按钮进行干预也会收到输入

然而,SendKeys行为改变之间的真正原因并非程序员友好性(没有显着改善),而是security

设置SendKeys参数以指定所需行为绝对是个好主意。您不希望您的应用程序因为UAC打开或关闭而神秘地开始表现不同。