【问题标题】:Unable to capture Enter Key无法捕获 Enter 键
【发布时间】:2012-05-17 18:46:47
【问题描述】:

我有一个简单的表单用于输入:

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 组件或类似的东西。

我也尝试过使用 "Key Press Event",它使用 KeyPressEventArgs 然后检查 KeyChar == 13 但这也不起作用。

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

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

【问题讨论】:

    标签: c# keyevent enter


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    你试过用吗

    Keys.Return
    

    相反

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

    【讨论】:

    • 或者在函数上放一个断点,看看当你按下回车键时会发生什么。
    • stackoverflow.com/questions/1557758/… 这表示它们是相同的。还是试试不会有什么坏处,你永远不知道。
    • @JunaidSaeed 第二部分怎么样,你是在使用接受按钮,还是你的文本框 acceptReturn 设置为 true?
    • acceptReturn 设置为 false,但这与问题无关,再次不管“else if (e.KeyCode == Keys.Enter)”中的内容如何,​​一旦我点击任何 UI ,它停止工作......不是里面的代码而是条件本身,这意味着之后“Enter”没有在任何UI项目上调用KeyDown......我也尝试过使用KeyChar但没有用的KeyPress
    【解决方案3】:

    这是因为您的表单定义了 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-18
      • 2021-08-26
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多