如何将字符串转换为键

gbk*_*gbk 6 .net c# key typeconverter winforms

尝试实现我的程序的按键组合当前可以检测所需的keypressed(在这篇文章中描述了如何)但只在代码中预定义,但我想在condig文件中存储设置然后读取它并使用如果按下.

现在可以存储它,并作为字符串读取 - 当前尝试Keys使用下一个代码将readed字符串转换为:

存储在配置文件中:

<add key="open" value="ControlKey,N"
<add key="close" value="ControlKey,Q" />
<add key="clear" value="ControlKey,D" />
<add key="settings" value="ControlKey,S" />
<add key="colorKey" value="ControlKey,K" />
<add key="fontKey" value="ShiftKey,T" />
<add key="defaultKey" value="ControlKey,P" />
Run Code Online (Sandbox Code Playgroud)

并使用它

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        TypeConverter converter = TypeDescriptor.GetConverter(typeof(Keys));
        string[] keyValueTemp;

        keyValueTemp = cm.GetValueString("open").ToString().Split(',');
        string key1 = keyValueTemp[0];
        string key2 = keyValueTemp[1];

        Keys keys1 = (Keys)converter.ConvertFromString(key1);
        Keys keys2 = (Keys)converter.ConvertFromString(key2);

        if (ModifierKeys == keys1 && e.KeyCode == keys2)
        {
            string keyPressed = e.KeyCode.ToString();
            MessageBox.Show(keyPressed);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,有下一个结果 -

在此输入图像描述 所以 - 正如你所看到的 - 这个转换控制键转换为Shiftkey,也尝试使用代码if (ModifierKeys.ToString() == keyValueTemp[0] && e.KeyCode.ToString() == keyValueTemp[1]),但它也不起作用.

如果使用此代码

        if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N)
        {
            string keyPressed = e.KeyCode.ToString();
            MessageBox.Show(keyPressed);
        }
Run Code Online (Sandbox Code Playgroud)

一切都有效

问:如何将字符串转换为Keys并将其与keyPressed事件进行比较?

编辑

所以找到了我的错误

Keys key = (Keys)converter.ConvertFromString(keyValueTemp[0]);
Keys key2 = (Keys)converter.ConvertFromString(keyValueTemp[1]);
if (e.Modifiers == key && e.KeyCode == key2)
   {
       MessageBox.Show(e.KeyCode.ToString());
   }
Run Code Online (Sandbox Code Playgroud)

忘记添加e- 来自事件处理程序

另一种方式 - 由AccessDenied编写

 Keys key = (Keys)Enum.Parse(typeof(Keys), keyValueTemp[0], true);
Run Code Online (Sandbox Code Playgroud)

Muh*_*mar 8

Keys key;
Enum.TryParse("Enter", out key);
Run Code Online (Sandbox Code Playgroud)


Kur*_*ran 7

使用枚举进行关键比较,所以你要做的就是String to Enum转换.

if (e.Modifiers == (Keys)Enum.Parse(typeof(Keys), "keys1", true)
    && e.KeyCode == (Keys)Enum.Parse(typeof(Keys), "keys2", true))
{
    string keyPressed = e.KeyCode.ToString();
    MessageBox.Show(keyPressed);
}
Run Code Online (Sandbox Code Playgroud)