按钮 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
事件。 Alt、Ctrl、Shift 也不起作用。
如何让按钮接收 Enter 键按下?
更新:
下面我也试过了,没有成功
this.myButton.MouseClick += new MouseEventHandler(myButton_Click);
Enter 和 space 可以使用点击事件处理。
this.myButton.Click += new EventHandler(myButton_Click);
当 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");
}
}
WinForms中的Button控件会吃Enter,Space,Tab, ESC, 以及其他一些特殊键的按下事件。拦截这些事件的一种方法是覆盖 Control.ProcessDialogKey。或者您可以覆盖 IsDialogKey 以说明是否应将某个键作为特殊情况处理。
另一种选择是在您的父窗体上设置 KeyPreview = true。然后你可以在表单级别处理所有 KeyPress 事件,如果你需要查看哪个控件具有 Focus
,则使用 Form.ActiveControl
我有一个按钮,我为其设置了 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 也不起作用。
如何让按钮接收 Enter 键按下?
更新:
下面我也试过了,没有成功
this.myButton.MouseClick += new MouseEventHandler(myButton_Click);
Enter 和 space 可以使用点击事件处理。
this.myButton.Click += new EventHandler(myButton_Click);
当 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");
}
}
WinForms中的Button控件会吃Enter,Space,Tab, ESC, 以及其他一些特殊键的按下事件。拦截这些事件的一种方法是覆盖 Control.ProcessDialogKey。或者您可以覆盖 IsDialogKey 以说明是否应将某个键作为特殊情况处理。
另一种选择是在您的父窗体上设置 KeyPreview = true。然后你可以在表单级别处理所有 KeyPress 事件,如果你需要查看哪个控件具有 Focus
,则使用 Form.ActiveControl