获取KeyPress事件中的KeyCode值

如何解决此错误:

‘System.Windows.Forms.KeyPressEventArgs’不包含’KeyCode’的定义,也没有接受第一个类型为’System.Windows.Forms.KeyPressEventArgs’的扩展方法’KeyCode’(你是否缺少using指令)或汇编参考?)

码:

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

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

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

但是你可以从KeyDown事件中获取它。 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 "); } }