попытаться реализовать комбинацию нажатия клавиш для моей программы в настоящее время может обнаружить требуемую клавиатуру (в описании this post), но только предопределено в коде, но я хочу сохранить настройку в файле 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);
}
}
Но, имеет следующий результат -
Итак - как вы видите - это преобразование ключа управления в 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);
}
все работы
Q: Как я могу преобразовать строку в Кис и сравнить его с Keypressed событий?
EDIT
Так нашел мою ошибку
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);
Проверьте этот ответ, возможно, было бы полезно. http://stackoverflow.com/questions/12449484/convert-string-to-corresponding-forms-keys-value –