C# 什么';处理多个全局热键是一个很好的设计? 我正在努力想出一个好的设计来处理多个全局热键。

C# 什么';处理多个全局热键是一个很好的设计? 我正在努力想出一个好的设计来处理多个全局热键。,c#,hotkeys,C#,Hotkeys,假设我有三个不同的函数绑定到三个不同的全局热键 播放歌曲| Ctrl+P 跳过歌曲| Ctrl+N 增加音量| Ctrl+V 检查按下的热键是否符合特定功能的有效方法是什么?我使用的类与此非常类似: 我应该为每个热键创建热键类的新实例吗 Hotkey hotkey = new Hotkey(); hotkey.RegisterHotkey(Shortcut.ModifierKeys.Control, Keys.F10); hotkey.KeyPressed += ((s, args) =>

假设我有三个不同的函数绑定到三个不同的全局热键

  • 播放歌曲| Ctrl+P
  • 跳过歌曲| Ctrl+N
  • 增加音量| Ctrl+V
  • 检查按下的热键是否符合特定功能的有效方法是什么?我使用的类与此非常类似:

    我应该为每个热键创建热键类的新实例吗

    Hotkey hotkey = new Hotkey();
    hotkey.RegisterHotkey(Shortcut.ModifierKeys.Control, Keys.F10);
    
    hotkey.KeyPressed += ((s, args) =>
    {
        //Do Something!
    });
    

    或者我应该拥有一个具有不同热键函数的枚举,并从热键类中对其进行管理,以防止出现多个实例(看起来很浪费,但很容易)。感谢您提前提供的建议/帮助。

    我会选择为每个不同的函数创建一个单独的类实例,因为命令模式似乎非常适合这里。有关更多信息,请参阅。

    为什么不将热键类设置为静态

     Hotkey.Register(modifier, key, callback)
    
    把它们放在班级里的一个列表里


    另外,我建议在热键中添加更多的修改器。你们所有人都被分配到一个共同的任务:Control+P=Print、Control+N=New和Control+V=Paste

    我在这个方法和使用Dean刚刚告诉我的命令模式之间左右为难。我没有考虑将回调作为参数传递,我认为这是一个很好的设计。而热键引用的是人为设计的。不过,在运行时使用此方法无法很好地更改热键。这是我首选的设计模式,因为它非常易读且易于实现。只是想澄清一下,你会选择我创建一个热键类的新实例,基本上是重复我在事件回调中用不同语句提供的代码片段?Alex,有点,是的。在最近的一个应用程序中,我遵循了一个非常类似的设计,在这个应用程序中,我保留了一个字典,将热键映射到代理,然后在上面迭代并连接所有内容。谢谢你的回答,迪恩,我很感激。你也是,乔伊,谢谢你的确认。乔伊,如果你能抽出时间给我,我非常希望看到一个使用代码的例子,说明你是如何将热键映射到代表的。亚历克斯:(第36行和后面)。这一切都有点粗糙;我没有好好打扫,但我想现在已经足够了。谢谢你,乔伊。很抱歉,我不能给你任何声誉分数。你需要重新考虑一下。每当用户在运行另一个程序时从剪贴板粘贴时,通过使用标准的Ctrl+V键,她实际上并没有要求增加音量。她真的想粘贴。像这样使用快捷键对RegisterHotKey来说是非常不合适的。下面的例子是人为设计的。很抱歉有任何模棱两可的地方,其他人早些时候也表达了类似的担忧。我以后会尽量弄清楚的。