当MultiLine属性为True时,选择所有快捷方式失败

时间:2013-04-09 22:10:30

标签: winforms visual-studio

我有一个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之后,机器仍然会发出“叮”声。

是否有办法抑制声音,甚至更好的方法,使文本框接受快捷方式的方式与非多线文本框相同?

1 个答案:

答案 0 :(得分: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.