按键KeyPress不适用于输入键

时间:2015-11-19 21:45:59

标签: c# .net winforms keypress

我有一个按钮,我为其设置了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 事件。此外 Alt Ctrl Shift 无效。

如何让按钮接收回车键?

更新:

我在下面试了一下没有运气

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

3 个答案:

答案 0 :(得分:3)

Button具有焦点并按 Enter Space 时,Click事件会升起。

所以要处理 Enter Space ,它足以处理Click事件,并把你需要的逻辑放在那里。

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

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

如果您真的想知道是否按了 Enter Space ,您可以查看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");
    }
}

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

WinForms中的Button控件将吃 Enter Space Tab ESC 等等特别关键的新闻发布会。拦截这些事件的一种方法是覆盖Control.ProcessDialogKey。或者,您可以覆盖IsDialogKey,以确定是否应将密钥作为特殊情况处理。

另一个选项是在您的父窗体上设置KeyPreview = true。然后,您可以在表单级别处理所有KeyPress事件,并使用Form.ActiveControl,如果您需要查看具有Focus的控件