获取KeyPress事件中的KeyCode值

时间:2015-04-11 09:57:44

标签: c# winforms keypress

如何解决此错误:

  

' System.Windows.Forms.KeyPressEventArgs'不包含定义   对于KeyCode'没有扩展方法' KeyCode'接受第一个   类型' System.Windows.Forms.KeyPressEventArgs'的参数可能   发现(您是否缺少using指令或程序集引用?)

代码:

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
     if (e.KeyCode == Keys.Enter)
     {
         MessageBox.Show("Enter Key Pressed ");
     }
}

我正在使用Visual Studio 2010,这个项目的框架4。

2 个答案:

答案 0 :(得分:4)

您无法从KeyCode获取KeyPress(至少不使用某些映射)事件,因为KeyPressEventArgs仅提供KeyChar属性。

但你可以从KeyDown event获得它。 System.Windows.Forms.KeyEventArgs具有所需的KeyCode属性:

    private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
       MessageBox.Show(e.KeyCode.ToString());
    }

如果KeyDown事件不适合您,您仍然可以将KeyCode保存在某个私有字段中,稍后在KeyPress事件中使用它,因为在正常情况下每个KeyPress都在KeyDown之前:

  

关键事件按以下顺序发生:

     
      
  • 的KeyDown

  •   
  • 按键响应

  •   
  • KEYUP

  •   
private Keys m_keyCode;

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    this.m_keyCode = e.KeyCode;
}

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
     if (this.m_keyCode == Keys.Enter)
     {
         MessageBox.Show("Enter Key Pressed ");
     }
}

答案 1 :(得分:0)

尝试

    private void game_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (e.KeyChar == (char)Keys.Enter)
            MessageBox.Show(Keys.Enter.ToString(), "information", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }