在 KeyPress 事件中获取 KeyCode 值

Smy*_*las 0 c# keypress winforms

如何修复此错误:

“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 ");
     }
}
Run Code Online (Sandbox Code Playgroud)

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

Eug*_*kal 6

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

但是你可以从KeyDown事件中得到它。System.Windows.Forms.KeyEventArgs具有所需的KeyCode属性:

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

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

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

  • 按键按下

  • 按键

  • 键升

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 ");
     }
}
Run Code Online (Sandbox Code Playgroud)