C# ProcessCmdKey函数中捕捉不到WM_KEYUP

snn1410 2017-05-04 09:33:31
在WinForm程序中,Tab键按下,或者方向键按下,焦点移动,如何Tab键一直按住,不弹起,默认是焦点一直移动。现在我想要的动作是Tab键弹起(KeyUp)的时候触发焦点移动,该如何实现?
...全文
617 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
snn1410 2017-05-09
  • 打赏
  • 举报
回复
ProcessDialogKey 方法中tab键按下return false 然后在控件的keyUp事件 判断是Tab键 寻找下一个控件SelectNextControl
赵4老师 2017-05-05
  • 打赏
  • 举报
回复
BIOS不是操作系统的一部分?!
赵4老师 2017-05-05
  • 打赏
  • 举报
回复
BIOS是硬件吗?!
赵4老师 2017-05-04
  • 打赏
  • 举报
回复
不可以捕捉WM_KEYDOWN msg后重新sendWM_KEYUP
snn1410 2017-05-04
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
一个键长时间按住,等价于多次按住抬起该键。 这是操作系统的默认行为。
现在要求的动作是按住Tab键不弹起,焦点不移动,松开的时候焦点移动。 所以求助。可以捕捉WM_KEYDOWN msg后重新sendWM_KEYUP吗?
赵4老师 2017-05-04
  • 打赏
  • 举报
回复
你可以设置控制面板、键盘、速度、字符重复、重复延迟为最长,重复速度为最慢试试看。
赵4老师 2017-05-04
  • 打赏
  • 举报
回复
一个键长时间按住,等价于多次按住抬起该键。 这是操作系统的默认行为。
舉杯邀明月 2017-05-04
  • 打赏
  • 举报
回复
这儿是VB版块,C#的问题,干吗不在.NET -> C# 版中去问? WinForm程序中,Tab键按下时就切换控件焦点,这个是“默认的消息处理”就决定了的,并不是要等“放开”时才切换点。 你可以试试用键盘底层HOOK,把按键消息“吃掉”,看看能否阻止它切换焦点。 如果“可以阻止”,那么你需要在“Tab键放开”时自己处理焦点切换。
引用 1 楼 zhao4zhong1 的回复:
一个键长时间按住,等价于多次按住抬起该键。 这是操作系统的默认行为。
胡说………… 1. 一个键按住不放,等“延时”达到后,只会产生很多“按下”的消息,根本不是“按下/放开……”。 2. 自动“重复按键”是硬件行为,根本不是“操作系统默认行为”!   自己看看BIOS中,就是延时、重复速率这些相关参数的设置。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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