【问题标题】:Accelerator (mnemonic key) are executed without pressing ALT key加速器(助记键)在不按 ALT 键的情况下执行
【发布时间】:2012-01-25 12:07:37
【问题描述】:

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

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

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

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

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

提前致谢。

【问题讨论】:

  • 您使用的是什么版本的 .NET?
  • @leanne:它是 .NET 2.0 但是,我也测试过 .NET 3 和 .NET 3.5 和 .NET 4.0 也失败了。
  • +1 因为我刚遇到同样的问题,这个问题很有用!但从技术上讲,我认为它是“助记键”而不是加速键?
  • 太好了,编辑了帖子。谢谢

标签: .net winforms button


【解决方案1】:

您可以通过将此 sn-p 粘贴到您的表单中来更改此行为:

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

不是 100% 确定这不会有其他副作用,Winforms 中的键盘处理很复杂。

【讨论】:

  • 谢谢,我在接收加速器的控件中做了同样的覆盖 ProcessMnemonicChar。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2021-04-21
    • 2011-08-07
    • 1970-01-01
    • 2011-04-24
    相关资源
    最近更新 更多