找回密码
 立即注册

QQ登录

只需一步,快速开始

xjsxjs197
论坛元老   /  发表于:2014-11-11 16:16  /   查看:6976  /  回复:3
以前问过相同的问题,当时是在PreviewKeyDown事件中判断屏蔽的,当时是没有问题的。

但是,控件升级到File Version : 7.0.2014.0423后,就有问题了:
当焦点在TabControl上时,按Ctrl + Tab,自然会走PreviewKeyDown事件,我可以捕捉到,并相应处理;
如果焦点不在TabControl上,而是在TabControl的TabPage中的某一输入框,按Ctrl + Tab,就不会走PreviewKeyDown事件,但还是自动切换Tab了!最理解不了的是,父页面的PreviewKeyDown事件也不走了。

这的确很智能,在绝大多数场合都适用,但是肯定还会有特殊情况的,请问有办法在TabControl不获得焦点时,按Ctrl + Tab,先做我的处理,后做控件内部处理吗?

补充:我暂时可以在TabSelecting事件中判断,如果当前TabControl没有获得焦点,就取消,不过感觉这是使用一种打补丁的方法来绕这个问题,希望能有更简单一点的方式。

3 个回复

倒序浏览
Leo
超级版主   /  发表于:2014-11-11 17:51:00
沙发
如果焦点不在TabControl上,而是在TabControl的TabPage中的某一输入框,按Ctrl + Tab,就不会走PreviewKeyDown事件,但还是自动切换Tab了!
这个行为,在6.0版本被Log为HotFix的Bug,并且已经被修复
修复之后导致的一个副作用就是像你看到的,父页面无法收到PreviewKeyDown了。我觉得这个可能是一个问题。在后续版本中可以考虑修复一下。

关于目前的版本,有一个神器叫做GcGlobalHook,专治各种疑难杂症。参考以下Code:
  1. // EnableKeyBoardHook先
  2. this.gcGlobalHook.EnableKeyboardHook = true;
  3. private void gcGlobalHook1_KeyDown(object sender, KeyEventArgs e)
  4.         {
  5.             if (e.KeyData == (Keys.Control | Keys.Tab) ||
  6.                 e.KeyData == (Keys.Control | Keys.Shift | Keys.Tab))
  7.             {
  8.                 System.Diagnostics.Debug.WriteLine("Ctrl+Tab");
  9.                 if (this.gcTabControl1.ContainsFocus)
  10.                 {
  11.                     e.Handled = true;
  12.                 }
  13.             }
  14.         }
复制代码

评分

参与人数 1满意度 +5 收起 理由
xjsxjs197 + 5 非常感谢回答!

查看全部评分

回复 使用道具 举报
xjsxjs197
论坛元老   /  发表于:2014-11-12 14:42:00
板凳
非常感谢!果然是神器!!!
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2014-11-12 17:32:00
地板
回复 3楼xjsxjs197的帖子

此贴完结。
如果有新问题欢迎开新帖。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部