C#Visual Studio,当按钮具有焦点时如何检测Enter键

时间:2018-10-05 10:12:04

标签: c# winforms keyboard enter

我有以下代码可以检测到Enter键,并且工作正常。但是,如果您单击表单上的按钮,它将停止工作,即现在按下的按钮具有焦点,而回车则直接进入该按钮。

private void Form1_Load(object sender, EventArgs e)
{
    KeyPreview = true;
}

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

我尝试以下操作均未成功;

  1. 使用表单PreviewKeyEvent代替keyUp
  2. 使用表单KeyDown代替KeyUp
  3. 创建一个被选择为表单的“ AcceptButton”的按钮

我的解决方法是创建一个按钮,该按钮在加载时“选择”表单,在输入时将单击该按钮。然后运行一个计时器,以在选择其他按钮时将注意力集中在该按钮上。这似乎是一个伪劣的解决方案。

任何想法都将不胜感激。好像我缺少明显的东西。

菲尔

1 个答案:

答案 0 :(得分:1)

覆盖ProcessCmdKey

protected override bool ProcessCmdKey( ref Message msg, Keys keyData ) {
    if( keyData == Keys.Enter ) {
        // Enter is pressed

        return true; //return true if you want to suppress the key.
    }

    return base.ProcessCmdKey( ref msg, keyData );
}