【问题标题】:Select All shortcut fails when MultiLine property is True当 MultiLine 属性为 True 时,全选快捷方式失败
【发布时间】:2013-04-09 22:10:29
【问题描述】:

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

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

【问题讨论】:

    标签: winforms visual-studio


    【解决方案1】:

    这对许多程序员来说是一个惊喜,但是当它处于多行模式时,本机 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。

    【讨论】:

    • 嗯,这对我来说绝对是一个惊喜。 +1
    • @Hans Passant 谢谢,我知道 SelectAll,但我仍然有那种烦人的“叮”声。将e.SuppressKeyPress = true 添加到e.Handled = true 停止了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    • 2021-11-23
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多