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

jac*_*jac 7 visual-studio winforms

我有一个Windows窗体应用程序,上面有一个标准的TextBox.没有事件被处理,表单上没有菜单.当我按Ctrl+ A快捷键选择所有文本时,我得到一个丁,没有选择任何东西.

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

我可以很容易地在KeyDown事件中捕获关键笔划组合,但即使在设置e.Cancel = true机器静止之后听起来也是"叮".

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

Han*_*ant 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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

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