如何以正确的方式使用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但不输入密钥 – 尝试创建额外的if但是 – 结果相同…


将事件从KeyPress更改为KeyDown – 现在它正常工作

对于Control和另一个字母的其他组合,有一个有趣的事情, e.KeyChar将有不同的代码。 例如,通常e.KeyChar = 'a'代码为97 ,但在按下(或A )之前按Control时,实际代码为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"); }