繁体   English   中英

按键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也不起作用。

如何让按钮接收按键?

更新:

我也试过下面没有任何运气

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

Button具有焦点并按EnterSpace时Click事件会升起。

因此,要处理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");
    }
}

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

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

WinForms中的Button控件将包含EnterSpaceTabESC和其他一些特殊键的新闻事件。 拦截这些事件的一种方法是覆盖Control.ProcessDialogKey。 或者您可以覆盖IsDialogKey来说明是否应将键作为特殊情况处理。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM