为什么有些文本框不接受Control + A默认选择all的快捷方式

naw*_*fal 42 c# select textbox .net-2.0

我在我的程序中找到了一些文本框,它们接受Control + A快捷方式,以"默认情况下"选择整个文本,"无编码".

我不知道我必须在这里提供哪些额外信息才能为所有这些信息启用它,因为我发现这些文本框之间完全没有区别.它们都是简单的拖放文本框.

注意:我不是在谈论这段代码:

if (e.Control && e.KeyCode == Keys.A)
{
    textBox1.SelectAll();
}
Run Code Online (Sandbox Code Playgroud)

我想要默认选择...或者是否有更改文本框属性,以便文本框接受所有默认的Windows快捷方式?

其他(一切Control + Z,Control + X,Control + C,Control + V)的工作原理是默认!为什么不Control + A呢?

更新:Ctrl+A默认接受的文本框是屏蔽文本框,而不是常规文本框.那时我使用的是.NET 2.0.但我想最初的问题是别的,因为我可以看到Ctrl+A在.NET 2.0代码中默认工作正常.

Fré*_*idi 66

您可能正在寻找ShortcutsEnabled属性.将其设置为true允许您的文本框实现Ctrl+ A快捷方式(以及其他).从文档:

使用该ShortcutsEnabled属性可启用或禁用以下快捷键组合:

  • CTRL+Z

  • CTRL+E

  • CTRL+C

  • CTRL+Y

  • CTRL+X

  • CTRL+BACKSPACE

  • CTRL+V

  • CTRL+DELETE

  • CTRL+A

  • SHIFT+DELETE

  • CTRL+L

  • SHIFT+INSERT

  • CTRL+R

但是,文档说明:

文本框控件不支持CTRL+ A快捷键时,多行属性值为true.

您可能必须使用另一个子类TextBoxBase,例如RichTextBox,才能使用它.

  • 多行文本框的可怕功能,但至少在RichTextBox中交换很容易 (4认同)
  • @nawfal,这可能是因为`TextBox`包装了本机Windows`EDIT`控件,它只支持快捷键的一部分.解决问题的一种方法是从`TextBox`派生自己的类,在那里实现`Ctrl + A`快捷方式,并在整个项目中使用该类. (3认同)
  • 如果启用ReadOnly属性,TextBox控件似乎也会失败Ctrl + A. 我不明白为什么readonly会禁止方便的文本选择... (3认同)
  • @FrédéricHamidi,是的,我已经为所有文本框打开了它.仍然在我的程序中,默认情况下只有少数文本框接受Control + A快捷方式.在您提供的链接中,它显示"TextBox控件不支持快捷键".这是什么意思? (2认同)

Jun*_*r M 25

确实,除非你添加这样的东西,否则CTRL + A将无效:

  private void textBox1_KeyDown(object sender, KeyEventArgs e)
  {
      if (e.Control && (e.KeyCode == Keys.A))
      {
          if (sender != null)
               ((TextBox)sender).SelectAll();
          e.Handled = true;
      }
  }
Run Code Online (Sandbox Code Playgroud)

  • 这正是已经提到的问题.我正在寻找一种避免这种情况的解决方案. (3认同)
  • 尽管如此,这对我来说非常有用,对于那些一次又一次重新输入,并且不想使用任何令人困惑的方法或第三方方式的人来说. (2认同)
  • 由于一些奇怪的原因,除了选择所有内容之外,这还会发出错误蜂鸣声.编辑:添加`e.SuppressKeyPress = true;`修复:) (2认同)