7

我有一个 Windows 窗体应用程序,上面有一个标准的 TextBox。没有正在处理的事件,表单上也没有菜单。当我按Ctrl+A快捷方式选择所有文本时,我得到一个 ding,并且没有选择任何内容。

为了确认我没有无意中编写代码,我创建了一个新的 Windows 窗体应用程序,窗体上只有一个文本框。我用 C# 和 VB.Net 都试过了,两者都是一样的。我已经在 Windows 7 上运行的 Visual Studio 2012 Update 1 和 Windows XP 上运行的 Visual Studio 2008 中尝试过这个,并且在每个实例中它的行为都相同。

我可以很容易地在 KeyDown 事件中捕捉到击键组合,但即使在设置e.Cancel = true机器后仍然会发出“叮当”的声音。

有没有办法抑制声音,甚至更好的方法是让文本框像非多行文本框一样接受快捷方式?

4

1 回答 1

18

这对许多程序员来说是一个惊喜,但是当它处于多行模式时,本机 Windows 编辑控件实际上并没有实现 Ctrl+A 作为快捷方式。它必须由使用它的程序来实现。例如,您可以在记事本中看到这一点,这是一个使用多行编辑控件的程序。使用 File + Open + File,选择 c:\windows\notepad.exe,打开 Accelerator 节点并双击其中一个表。

实现起来并不难:

    private void textBox1_KeyDown(object sender, KeyEventArgs e) {
        if (e.KeyData == (Keys.Control | Keys.A)) {
            textBox1.SelectAll();
            e.Handled = e.SuppressKeyPress = true;
        }
    }

更新:在 .NET 4.6.1 中进行了更改,System.Windows.Forms.TextBox 现在也为多行文本框实现了 Ctrl+A。

于 2013-04-10T00:44:58.840 回答