我有一个按钮,我为其设置了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);
答案 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的控件