【问题标题】:How to process the command after pressing Enter in keyDown event for button在按钮的keyDown事件中按Enter后如何处理命令
【发布时间】:2015-03-30 15:14:49
【问题描述】:

我正在编写一个仅由键盘上的 numblock 控制的应用程序,我需要用这段代码解决问题:

private void btnSaveCorrection_KeyDown(object sender, KeyEventArgs e)
{
    MessageBox.Show("HEY");

    if (e.KeyCode == Keys.Enter)
    {
        MessageBox.Show("HEY");
        // Save to DB and jump to next control
    }
    else
    {
        MessageBox.Show("WTF");
        // if e.KeyCode is [+] or [-], jump to next/previous control
    }
}

问题是: 当我按 Enter 时,什么也没有发生。当我按任何其他键时,会显示 MessageBox "WTF"。为什么在按下 Enter 时忽略 KeyDown 事件中的所有代码?如何解决?

感谢您的每一个回复。

【问题讨论】:

  • 您是否在您的页面上定义了一个默认按钮来抓取回车键?
  • 回车后设置断点的KeyCode是什么?在断点调试期间还会发生什么?
  • 它工作正常,所以你必须有其他事情发生。它有没有到达事件处理程序?
  • 您是否将另一个控件设置为默认接受按钮? msdn.microsoft.com/en-us/library/aa984346%28v=vs.71%29.aspx 如果你在选择一个按钮时按下回车,我相信它会点击它,这将在事件处理程序之前被触发。 Enter 和按钮的处理方式不同 - 您可能希望在表单上将 EnableKeyPreview 设置为 true 或类似的内容?
  • 这是winforms还是WPF?

标签: c# keydown enter


【解决方案1】:

嗯,对我来说,如果你链接 KeyUp 事件而不是 KeyDown 事件,它会起作用。

我认为问题在于输入键被认为是按钮上的“点击”作为其默认行为。

我的建议是链接 KeyUp 事件而不是 KeyDown 事件。

【讨论】:

  • 谢谢,KeyUp事件中相同的代码是可以的。这怎么可能?
  • 这与 windows 窗体控件的默认输入行为有关。 Enter 键“激活”控件(在按钮的情况下,它单击它)。看这里:social.msdn.microsoft.com/forums/windowsapps/en-us/…
猜你喜欢
  • 2011-12-26
  • 2013-02-02
  • 2011-01-09
  • 2012-12-21
  • 2017-03-28
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
相关资源
最近更新 更多