尝试为我的程序实现按键组合,目前可以检测到所需的按键(在这篇文章中描述了如何),但只能在代码中预定义,但我想将设置存储在 condig 文件中,然后读取它并在按下时使用。
现在可以存储它,并读取为字符串 - 当前尝试Keys
使用下一个代码将读取的字符串转换为:
存储在配置文件中:
<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" />
并使用它
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);
}
}
但是,有下一个结果——
所以 - 如你所见 - 将控制键转换为 Shift 键,也尝试使用代码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);
}
所有作品
问:如何将字符串转换为 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());
}
忘记添加e
- 从事件处理程序
另一种方式 - 正如AccessDenied所写
Keys key = (Keys)Enum.Parse(typeof(Keys), keyValueTemp[0], true);