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

时间:2011-12-21 17:32:29

标签: .net winforms button

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

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

this.searchButton = new System.Windows.Forms.Button();
this.searchButton.Text = "&search";

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

  • 这是一个.NET问题吗?
  • 如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:5)

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

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

不是100%肯定这不会产生其他副作用,Winforms中的键盘处理会让人感到沮丧。

答案 1 :(得分:2)

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

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

Building Keyboard Accelerators into .NET Windows Forms Applications - Code Guru

基本上,此解决方案涉及创建类,加载哈希表以及覆盖ProcessCmdKey以设置自己的加速器处理程序。