按钮 KeyPress 不适用于输入键

Button KeyPress Not Working for Enter Key

我有一个按钮,我为其设置了 KeyPress 事件。

this.myButton.KeyPress += new KeyPressEventHandler(this.myButtonEvent_keypress);

private void myButtonEvent_keypress(object sender, KeyPressEventArgs e)
{
     if (e.KeyChar == (char)Keys.Return || e.KeyChar == (char)Keys.Space)
     {
          // do something
     }
}

现在只要按下 Space 键,我就会触发事件。这部分工作正常。

但由于某种原因,Enter 键按下没有触发 KeyPress 事件。 AltCtrlShift 也不起作用。

如何让按钮接收 Enter 键按下?

更新:

下面我也试过了,没有成功

this.myButton.MouseClick += new MouseEventHandler(myButton_Click);

Enter 和 space 可以使用点击事件处理。

this.myButton.Click += new EventHandler(myButton_Click);

Button 获得焦点并且您按 EnterSpaceClick事件引发。

所以要处理 EnterSpace 就足以处理 Click 事件并把你的逻辑那里需要。

所以你只需要使用button1.Click += button1_Click;

private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show("Clicked!");
} 

如果你真的想知道 EnterSpace 是否被按下,你可以输入 PreviewKeyDown事件:

private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if(e.KeyCode== Keys.Enter)
    {
        MessageBox.Show("Enter");
    }
    if (e.KeyCode == Keys.Space)
    {
        MessageBox.Show("Space");
    }
}

WinForms中的Button控件会吃Enter,Space,Tab, ESC, 以及其他一些特殊键的按下事件。拦截这些事件的一种方法是覆盖 Control.ProcessDialogKey。或者您可以覆盖 IsDialogKey 以说明是否应将某个键作为特殊情况处理。

另一种选择是在您的父窗体上设置 KeyPreview = true。然后你可以在表单级别处理所有 KeyPress 事件,如果你需要查看哪个控件具有 Focus

,则使用 Form.ActiveControl