嘗試實現按鍵組合對我的程序來說當前可以檢測到所需的按鍵(在this post中描述瞭如何),但只在代碼中預定義,但我想將設置存儲在condig文件中,然後讀取並使用如果按下。如何將字符串轉換爲鍵
現在可以存儲,讀爲字符串 - 目前嘗試readed字符串轉換爲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);
}
}
但是,有下一個結果 -
所以 - 正如你所看到的 - 這將控制鍵轉換爲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);
}
所有作品
問:我怎樣才能將字符串轉換爲按鍵,並將其與事件的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
- 從事件處理程序
另一種方式 - 書面通過存取遭拒
Keys key = (Keys)Enum.Parse(typeof(Keys), keyValueTemp[0], true);
檢查這個答案可能會有幫助。 http://stackoverflow.com/questions/12449484/convert-string-to-corresponding-forms-keys-value –