其他分享
首页 > 其他分享> > 可以与传入的KeyEventArgs匹配的.NET类的热键吗?

可以与传入的KeyEventArgs匹配的.NET类的热键吗?

作者:互联网

基本上,我有运行时加载的类,如下所示:

[Plugin("Plugin name")]
class PluginActions
{
  [Action("Flip Normals")
  public void FlipNormals()
  {
    // code ....
  }

  [Action("Export .X object")
  public void ExportX()
  {
    // code ....
  }
}

这基本上是通过设置onClick事件处理程序将按钮添加到表单的.

现在,我想使用属性以相同的样式指定HOTKEY:

[Plugin("Plugin name")]
class PluginActions
{
  [Action("Flip Normals", Hotkey = "Ctrl+N")
  public void FlipNormals()
  {
    // code ....
  }

  [Action("Export .X object", Hotkey = "Ctrl+E")
  public void ExportX()
  {
    // code ....
  }
}

问题是,如何表示和捕获热键?作为琴弦?也许有一堂课吗?

void Form_KeyDown(object sender, KeyEventArgs e)
{
  // reflection magic ...

  foreach(var action in actionAttributes)
  {
    string action_hotkey = action.hotkey;

    /**** How to match KeyEventArgs against action_hotkey? ****/
  }
}

是否有用于处理热键的.net帮助程序类?

还是我必须推出自己的某种热键课程?

这里正确的方法是什么?

解决方法:

System.Windows.Forms命名空间中有Keys枚举.然后,对于热键Ctrl A,您可以编写如下内容:

public class Action : Attribute {
  public Keys HotKey {get;set;} 
}


[Action(HotKey = (Keys.Control | Keys.A))]
public void MyMethod() {
  ...
}

标签:reflection,hotkeys,plugins,c,net
来源: https://codeday.me/bug/20191201/2083388.html