2012-02-03 54 views
3

基本上我已经运行时加载的类,看起来像这样:是否有一个可以与传入的KeyEventArgs匹配的热键的.NET类?

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

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

这基本上增加了按键与建立的onClick事件处理器形式。

现在我想使用属性来指定在同一样式的快捷键:

[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辅助类?

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

这里的正确方法是什么?

回答

1

System.Windows.Forms命名空间中存在Keys枚举。然后热键Ctrl + A键,你可以写这样的事情:

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


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

KeyEventArgs包含KEYDATA属性,这是价值钥匙,这是一个标志,这意味着它可以是这样:

Keys keys = Keys.Control | Keys.F;(您热键)

如果你用这种方式定义你的热键(atribute)(而不是字符串),那么你可以比较键而不是字符串。

相关问题