捕获 windows 表单上的 Enter 键按下无效

Capturing Enter Key press on windows form not working

我有一个包含用户名和密码的用户身份验证表单 textboxes.There 是一个 okay 按钮,它会触发验证凭据的代码。 当用户在表单上的任意位置点击 Enter 键时,我希望执行相同的代码。 所以我注册了这样的按键事件

 this.KeyPress += UserLogin_KeyPress;
 private void UserLogin_KeyPress(object sender, KeyPressEventArgs e)
        {
             if (e.KeyChar == (char)13)
                {
                MessageBox.Show("enter");
                }

        }

此事件未在 all.What 触发,我做错了吗?

试试这个:

private void UserLogin_KeyPress(object sender, KeyPressEventArgs e)
{
   if (e.KeyCode == Keys.Enter)
   {
      MessageBox.Show("enter");
   }
}

只看形式。 窗体上的控件 也需要连线。

尝试将 属性 keypreview 设置为 true 并更改为 keydown,因为 KeyPress 不支持 e.Keycode:

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

如前所述,设置 form.KeyPreview = true 以便大多数关键事件将在控件之前提供给表单。

但是请注意,这并不总是有效,某些控件仍然会“窃取”某些按键。例如,如果 Button 有焦点,那么在您有机会看到它之前,按钮将使用 Enter 键来激活它,并且由于它被视为已被“处理​​”,您永远不会得到查看按键。

我为此使用的解决方法是将焦点设置在我知道不会窃取回车键的东西上,对于导致回车键按下的按键。因此,如果按下的键是 <1><2><3><4><ENTER> 那么 1-4 键都将焦点设置到不是按钮的东西(通常是我显示结果文本的文本框),然后当 <ENTER>被按下,它应该进入你的表单的事件处理程序(只要 KeyPreview == true)。