【问题标题】:I am having problem with Keyboard events capturing in C#我在 C# 中捕获键盘事件时遇到问题
【发布时间】:2013-02-23 23:30:38
【问题描述】:

我有一个简单的窗体 Windows 应用程序,我在其上为我的特定任务放置了一个自定义控件,我已经为 Form 编写了 KeyDown 处理程序,问题是 KeyDown 处理程序可以很好地处理除箭头之外的每个键键...控件没有进入键处理程序?为什么会这样?当我删除自定义控件时它开始正常工作?

【问题讨论】:

  • 当前焦点在哪里,哪个控件有?

标签: c# winforms


【解决方案1】:

看看this SO question

KeyPreview 是否开启? 哪个控件有焦点?

【讨论】:

  • 是的,Form 的 KeyPreview 已打开,并且我的自定义控件具有焦点,但为什么它不只捕获箭头键?它与所有其他键都可以正常工作,我注意到一件事是触发了 KeyUp 事件,但没有触发 keydown ....
  • 你点击链接了吗?您的自定义控件是否包含文本框?
【解决方案2】:

我看不出表单不能预览箭头键的原因。但无论如何,如果您需要对键盘处理(特别是快捷键处理)进行更多低级访问,您可以覆盖表单的 ProcessCmdKey

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.Left)
    {
        // your code here
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}

【讨论】:

    【解决方案3】:

    您应该在代码中的某个地方集中注意力以正确使用 ProcessCmdKey。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2014-04-28
      • 2021-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多