Как правильно использовать KeyPressEvent

попробуйте создать HotKeys для моих форм

код

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

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

РЕДАКТИРОВАТЬ

редактировать

Этот код захватывает только первую нажатую клавишу, но не комбинацию – поэтому, если я нажимаю CTRL + Enter – код захвата CTRL, но не Enter Key – попробуйте создать дополнительный, if но результат – то же самое …


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

Для других комбинаций Control и другой буквы есть интересная вещь, что e.KeyChar будет иметь другой код. Например, обычно e.KeyChar = 'a' будет иметь код 97 , но при нажатии Control перед нажатием (или 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"); } 

попробуйте это для комбинации Ctrl + N ,

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