可以与传入的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