4

尝试为我的表单创建热键

代码

    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 键 - 尝试创建额外if的但 - 结果相同......


将事件从更改KeyPressKeyDown- 现在可以工作了

4

2 回答 2

3

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

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更合适)。因为它支持KeyDatawhich 包含修饰键和另一个文字键的组合信息:

private void FormMain_KeyDown(object sender, KeyEventArgs e){
   //Pressing Control + N
   if(e.KeyData == (Keys.Control | Keys.N)) MessageBox.Show("e");
}
于 2013-09-29T08:42:53.153 回答
1

试试这个Ctrl+的组合N

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.N)
   {
      MessageBox.Show("e");
   }
于 2013-09-29T09:05:32.040 回答