【问题标题】:Key Down Event on WinForms Control Not FiringWinForms控件上的按键事件未触发
【发布时间】:2017-01-26 00:02:39
【问题描述】:

我相信之前有人问过与此类似的问题,但没有一个解决方案对我有用。我有一些代码需要在同时按下 CTRL 按钮和“+”按钮时运行。我确保在父论坛上将 KeyPreview 字段设置为 true。我已经尝试将以下事件处理程序放在控件的类中,但到目前为止没有一个对我有用。当我按任意键时,事件不会被捕获:

private void PreviewControl_OnKeyDown(object sender, KeyEventArgs e){}
protected override OnKeyDown(KeyEventArgs e){}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData){}

【问题讨论】:

  • 您的控件只有在包含焦点时才会收到按键事件。如果您想在没有焦点的情况下使用用户控件捕获快捷键,可以使用this trick
  • 如果您的控件类似于PictureBox,并且您希望使其可选择然后处理关键事件,请使其可选择this(Preferred)this
  • 我尝试实现(首选)一个,但我仍然遇到同样的问题。我一定是做错了什么,但我不知道是什么。
  • 我的控件鼠标事件工作正常(例如:protected override void OnMouseWheel(MouseEventArgs e){})。我确认当我进入这个事件处理程序时,this.ContainsFocus == true,这应该意味着控件有焦点。所以我认为问题必须不仅仅是关注控制。

标签: c# winforms event-handling controls keydown


【解决方案1】:

所以我在@Reza Aghaei 的帮助下让它工作了。我用this(Preferred)。 Reza 是对的,控件实际上并没有获得焦点,所以我需要添加此代码以便在您单击它时赋予控件焦点。但是,我无法使用 OnKeyDown 事件处理程序。相反,我必须在控件类中使用 ProcessCmdKey(ref Message msg, Keys keyData){} 才能捕获关键事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多