我有一个输入的简单表格:

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);
  }
}


当我启动应用程序时,此代码可以正常工作,但是单击任何组件后,其余代码都可以正常工作,但“输入关键条件”不起作用。

我的猜测是,“ Enter Key Condition”不适用于UI组件或类似组件。

我也尝试过使用“ Key Press Event”,该事件使用KeyPressEventArgs,然后检查KeyChar == 13,但这也不起作用。

有什么问题,我该如何解决?

ps。
我尚未为任何按钮设置任何按钮单击事件,该应用程序基于100%KBoard。

最佳答案

查看PreviewKeyDown。 Return在按钮控件上引发该事件。

    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

10-04 13:30