3

我有一个简单的表格,我可以通过它输入:

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 的。

4

3 回答 3

2

查看 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

于 2012-05-17T19:06:20.953 回答
0

你试过用

Keys.Return

反而

编辑:刚想到这个。您是否为主表单设置了接受按钮?

于 2012-05-17T18:51:38.540 回答
0

这是因为您的表单已定义 AcceptButton。例如,您有一个“OK”、“Accept”或“Confirm”按钮,其中 DialogResult 设置为“OK”。这告诉它的父窗体有一个 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);
    }
}
于 2019-03-02T16:18:48.887 回答