如何以正确的方式使用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"); }