首页 > 解决方案 > 用于按下按钮问题的 C# 可调热键功能

问题描述

我创建了一个热键功能 atm,以便用户可以根据自己的需要调整键绑定,然后我设置键并且它们不可调整。这是我以前用过的。

public void gHook_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.D:
            // stuff
            Salvagebtn.PerformClick();
            break;
        case Keys.F12:
            // stuff
            pausebtn.PerformClick();
            break;
        case Keys.K:
            //stuff
            Geardropbtn.PerformClick();
            break;
        case Keys.F:
            //stuff
            Gamblebtn.PerformClick();
            break;
        case Keys.A:
            //stuff
            LeftClickSpambtn.PerformClick();
            break;
        case Keys.H:
            // stuff
            openGRbtn.PerformClick();
            break;
        case Keys.B:
            //stuff                    
            gemupbtn.PerformClick();
            break;
    }
}

现在我做了一个设置选项卡,在那里 ppl 可以更改看起来像这样的键绑定。

在此处输入图像描述

我怎样才能让它而不是“case Keys.D:”它将对文本框中的键绑定做出反应?

标签: c#

解决方案


有几种方法可以做到。您可以采用的一种方法是将键绑定分配给 Dictionary 其中 UserActions 是定义可能操作的枚举:

public enum UserAction
{
    Salvage, Pause, Drop // etc...
}

然后当用户按下一个键时,类似于:

public void gHook_KeyDown(object sender, KeyEventArgs e)
{
    string k = e.KeyCode.ToString();
    if (KeyBindings.Contains(k)) //KeyBindings is your field or variable which is a Dictionary<string, UserAction>
    {
      var action = KeyBindings[k]
      switch (action)
      {
        case UserAction.Salvage:
          // stuff
          Salvagebtn.PerformClick();
          break;
        case UserAction.Pause:
          // stuff
          pausebtn.PerformClick();
          break;
         // and so on...

给字典赋值:

var KeyBindings = new Dictionary<string, UserAction>;
KeyBindings["D"] = UserAction.Salvage;
KeyBindings["A"] = UserAction.Pause;

如果需要从用户输入中获取密钥,可以使用 Enum.TryParse(input):

Keys key;
if (Enum.TryParse<Keys>(textBoxSalvage.Text, out key))
{
    KeyBinding[textBoxSalvage.Text] = UserAction.Salvage; // note that 'UserAction.something' comes from the context
}

推荐阅读