2013-09-29 2 views
0

попробовать создать горячие клавиши для моих формКак использовать KeyPressEvent в правильном пути

код

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)   
    { 
     if (e.KeyChar == (char)Keys.Enter) 
     { 
      MessageBox.Show("e"); 
     } 
    } 

работает для одного ключа, но если я whant использовать комбинацию клавиш, как CTRL + N, попытайтесь используйте if (e.KeyChar == (char)Keys.Enter && e.KeyChar == (char)Keys.N) - но он не работает. Я прав, используя такой код для комбинации клавиш?

EDIT

Edit

Этот захват кода только первый нажатой клавиши, но не сочетание - поэтому, если нажать CTRL + Enter - код захвата CTRL но не Enter Key - попытаться создать дополнительные if но - результат тот же ...


Изменить событие из KeyPress в KeyDown - теперь это работа

ответ

2

Для других комбинаций Control и еще одно письмо, есть интересная вещь, что e.KeyChar будет иметь другой код. Например, обычно e.KeyChar = 'a' будет иметь код 97, но при нажатии Control перед нажатием a (или A), действительный код 1. Таким образом, у нас есть этот код, чтобы иметь дело с другими комбинациями:

private void FormMain_KeyPress(object sender, KeyPressEventArgs e)   
{ 
    //Pressing Control + N 
    if(e.KeyChar == 'n'-96) MessageBox.Show("e"); 
    //Using this way won't help us differentiate the Enter key (10) and the J letter 
} 

Вы также можете использовать KeyDown событие для этой цели. (Фактически, подходит KeyDown). Потому что он поддерживает KeyData, который содержит комбинацию информации клавиш-модификаторов и другой буквальный ключ:

private void FormMain_KeyDown(object sender, KeyEventArgs e){ 
    //Pressing Control + N 
    if(e.KeyData == (Keys.Control | Keys.N)) MessageBox.Show("e"); 
} 
+0

попробовать - ModifierKeys - Ok , но вместо ключа N получить какой-то другой результат - см. Редактировать – gbk

1

попробовать это для комбинации Ctrl + N,

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N) 
    { 
     MessageBox.Show("e"); 
    } 
+0

Это нормально, но также я меняю событие - см. править, спасибо – gbk

+0

@ Kirill Great !! – Kurubaran

Смежные вопросы