如何以正确的方式使用KeyPressEvent

时间:2013-09-29 08:39:55

标签: c# .net winforms key

尝试为我的表单创建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) - 但它不起作用。我是对的 - 使用这样的密钥组合代码?

修改

Edit

此代码仅捕获第一个按键,但不是组合 - 所以如果我按CTRL + Enter - 代码捕获CTRL而不是Enter键 - 尝试创建其他if但是 - 结果相同......


将事件从KeyPress更改为KeyDown - 现在可以正常工作

2 个答案:

答案 0 :(得分:2)

对于Control和另一个字母的其他组合,有一个有趣的事情,e.KeyChar将有不同的代码。例如,通常e.KeyChar = 'a'的代码为97,但在按Control(或a)之前按A时,实际代码为{{1} }}。所以我们有这个代码来处理其他组合:

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

答案 1 :(得分:1)

尝试将 Ctrl + N 组合,

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