无需按ALT键即可执行加速器(助记键)

Dan*_*lba 5 .net button winforms

我在Windows窗体中使用助记键时遇到了一些麻烦:

只需要一个带按钮的表单,它使用ALT + s作为加速器:

this.searchButton = new System.Windows.Forms.Button();
this.searchButton.Text = "&search";
Run Code Online (Sandbox Code Playgroud)

只需按"s"即可执行按钮动作(无需按ALT键).我检查了一些其他应用程序,加速器操作仅在按下ALT键时执行.

  • 这是一个.NET问题吗?
  • 怎么可以解决这个问题?

提前致谢.

Han*_*ant 6

您可以通过将此代码段粘贴到表单中来更改此行为:

    protected override bool ProcessDialogChar(char charCode) {
        if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false;
        return base.ProcessDialogChar(charCode);
    }
Run Code Online (Sandbox Code Playgroud)

不是100%肯定这不会产生其他副作用,Winforms中的键盘处理令人费解.

  • 谢谢,我在接收加速器的控件中做了相同的重写ProcessMnemonicChar. (3认同)

lea*_*nne 3

这是 .NET 的正常行为(他们说是“设计使然”)。

这是一篇应该可以帮助您解决问题的文章 - 一开始并不简单或漂亮,但是一旦完成,您设置的任何快捷键都可以轻松添加:

将键盘加速器构建到 .NET Windows 窗体应用程序中 - Code Guru

基本上,该解决方案涉及创建一个类、加载哈希表以及重写 ProcessCmdKey 以设置您自己的加速器处理程序。