【问题标题】:Implementing keyboard shortcuts in .NET2.0 windows application在 .NET2.0 windows 应用程序中实现键盘快捷键
【发布时间】:2023-06-08 01:45:01
【问题描述】:

是否有任何框架可用于在 .NET2.0 Windows 应用程序中实现键盘快捷键?另外,在执行此操作时应注意哪些最佳做法?

【问题讨论】:

    标签: windows .net-2.0 keyboard-shortcuts


    【解决方案1】:

    虽然没有明显的方法可以为不在菜单中的命令提供加速键,但添加这些快捷键并不难。有五个基本步骤:

    定义一个加速器枚举。

    private enum Accelerators { Unspecified = 0, Home, Save, Print, Logout }; 
    

    创建一个包含枚举值的哈希表。

    Hashtable _accelHash() =  new Hashtable();
    

    创建一个类来表示加速键。

    使用 Keys 枚举加载表。

    _accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.H),
                                      Accelerators.Home);
    _accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.S),
                                      Accelerators.Save);
    _accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.P),
                                      Accelerators.Print);
    _accelHash.Add(new AcceleratorKey(Keys.Alt|Keys.X),
                                      Accelerators.Logout);
    

    最后,重写 ProcessCmdKey 并使用 switch 语句调度到正确的方法。

    protected override bool ProcessCmdKey(ref Message msg,
                                          Keys keyData)
    {
        ...
    }
    

    或者,对于稍微复杂的方法,您可以将哈希表映射到您想要调用的方法的委托,只要它们都具有相同的方法签名。

    Here's a short article 更详细地概述了上述步骤。

    【讨论】:

      【解决方案2】:

      实现快捷键的一种常见方法是在键盘事件中检测它们,例如 KeyDown 或 KeyUp。

      例子

      public void Form1_KeyUp(object sender,KeyEventArgs e)
      {
      if (e.Control && e.KeyData==Keys.A)
      {
      //handle ctrl+a
      }
      

      【讨论】:

        最近更新 更多