加速键(助记键)可以在不按下ALT键的情况下执行。

9

我在使用Windows Forms中的助记键时遇到了一些问题:

只需要一个带有按钮的窗体,使用ALT + s作为加速键:

this.searchButton = new System.Windows.Forms.Button();
this.searchButton.Text = "&search";
  • 这是一个.NET问题吗?
  • 如何解决这个问题?

提前致谢。


你正在使用哪个版本的.NET? - leanne
@leanne:这是.NET 2.0,但我也测试过.NET 3、.NET 3.5和.NET 4.0,同样失败。 - Daniel Peñalba
太好了,已经编辑了帖子。谢谢。 - Daniel Peñalba
2个回答

8
您可以通过将以下代码片段粘贴到表单中来更改此行为:
    protected override bool ProcessDialogChar(char charCode) {
        if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false;
        return base.ProcessDialogChar(charCode);
    }

不能百分之百确定这种方法不会产生其他副作用,Winforms中的键盘处理相当复杂。


3
谢谢。我在接收加速键的控件中使用了相同的重写ProcessMnemonicChar方法。 - Daniel Peñalba

3

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

下面的文章应该会有所帮助 - 开始时并不简单或美观,但一旦完成,您设置的任何快捷键都可以轻松添加:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接