WinForm用KeyPreview捕获非焦点热键,和其他焦点热键冲突

张天星 2019-06-11 07:11:46
我在主窗体上设置了KeyPreview=true
这样,就算焦点在其他控件上,我也可以捕获到组合热键。
但是现在遇到了问题。
但焦点集中在某个Button、RichTextBox等控件上时,会发生冲突。
我要捕获shift+enter热键,冲突情况:
1.焦点在Button上时,响应了Button_Click事件,主窗体捕获不到事件。
2.焦点在RichTextBox上时,RichTextBox响应了Enter事件,换行了,而主窗体也捕获到了组合热键。
。。。
现在有两个问题:
问:如何让主窗体优先捕获事件?并且暂停后续的事件响应?

...全文
256 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
张天星 2019-06-27
  • 打赏
  • 举报
回复
引用 3 楼 stherix 的回复:
override form的 ProcessCmdKey等 可以捕获一些KeyDown捕获不到的
嗯,不知道优先级如何,回头试一下,如果可以用,就不要全局钩子了。
stherix 2019-06-27
  • 打赏
  • 举报
回复
override form的 ProcessCmdKey等 可以捕获一些KeyDown捕获不到的
张天星 2019-06-27
  • 打赏
  • 举报
回复
已经用全局键盘钩子解决问题,帖子就结束了吧,第一个回复的给分结贴。 …… 全局键盘钩子获取到键盘按键之后, 如果不想其他控件继续响应事件,就需要在键盘事件中,设置: e.Handled = true,表示事件已经被处理了。 但这样还不够,比如一些单选项,一些下拉框,在你按上下左右键盘的时候,还是会触发事件,比如下拉框会更换选中项,单选框会左右切换选中项。 所以,除了e.Handled = true 还需要移除焦点: this.plImage.Focus() 将焦点移动到其他没啥事件的控件上,就可以解决问题。
张天星 2019-06-12
  • 打赏
  • 举报
回复
自顶,有人伸出援手么。。

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧