无法捕捉回车键(Unable to capture Enter Key)

2019-09-17 07:53发布

我有一个简单的形式,由我带输入:

12个按钮,文本框1(禁用&只读)

这是我做处理输入

Login_KeyDown()是常用的方法我要求每UI组件和形式本身的所有在KeyDown ..

private void Login_KeyDown(object sender, KeyEventArgs e)
{            
  if (e.KeyCode == Keys.Escape)
  {
    Application.Exit();
  }
  else if (e.KeyCode == Keys.NumPad9 || e.KeyCode == Keys.D9)
  {
    button3.BackgroundImage = Properties.Resources.button_hover;
    button3.ForeColor = Color.White;
    pin.Text = pin.Text + "9";
  }
  else if (e.KeyCode == Keys.Back)
  {
    button11.BackgroundImage = Properties.Resources.button_hover;
    button11.ForeColor = Color.White;
    if (pin.Text.Length > 0)
      pin.Text = pin.Text.Substring(0, pin.Text.Length - 1);
  }
  else if (e.KeyCode == Keys.Enter)
  {
    MessageBox.Show(pin.Text);
  }
}

此代码工作正常,当我启动应用程序,但我已经点击任何组件后,代码的其余部分工作正常,但“进入关键条件”不起作用。

我的猜测是“回车键条件”不工作的UI组件或类似的东西。

我一直在使用“按键事件”,它采用KeyPressEventArgs然后检查KeyChar == 13也试过但也不能正常工作。

这是什么问题,我怎么能解决呢?

PS我没有设置任何按钮,任何按钮点击事件,该应用程序是基于100%KBoard。

Answer 1:

退房PreviewKeyDown。 返回引发按钮控件的事件。

    private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Return)
            MessageBox.Show("I found return");

    }

或者你也可以强制使用,以提高在keydown事件的特殊键:

    private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
    {
        if (e.KeyCode == Keys.Return)
            e.IsInputKey = true;
    }

更多信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx



Answer 2:

你有没有试过用

Keys.Return

代替

编辑:刚才想到了这一点。 你有没有为的AcceptButton主要形式设置?



Answer 3:

这是因为你的表已经定义的AcceptButton。 例如,你有一个“OK”,“接受”或“确定”用的DialogResult设置为“确定”按钮。 这告诉其父形式存在的AcceptButton,并在窗体上的Enter事件会去这个按钮。

你应该做的是捕捉在形式层面Enter键。 该代码添加到窗体:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if ((this.ActiveControl == myTextBox) && (keyData == Keys.Return))
    {
        //do something
        return true;
    }
    else
    {
        return base.ProcessCmdKey(ref msg, keyData);
    }
}


文章来源: Unable to capture Enter Key