如果屏蔽PlusPak中TabControl的Ctrl + Tab处理
以前问过相同的问题,当时是在PreviewKeyDown事件中判断屏蔽的,当时是没有问题的。但是,控件升级到File Version : 7.0.2014.0423后,就有问题了:
当焦点在TabControl上时,按Ctrl + Tab,自然会走PreviewKeyDown事件,我可以捕捉到,并相应处理;
如果焦点不在TabControl上,而是在TabControl的TabPage中的某一输入框,按Ctrl + Tab,就不会走PreviewKeyDown事件,但还是自动切换Tab了!最理解不了的是,父页面的PreviewKeyDown事件也不走了。
这的确很智能,在绝大多数场合都适用,但是肯定还会有特殊情况的,请问有办法在TabControl不获得焦点时,按Ctrl + Tab,先做我的处理,后做控件内部处理吗?
补充:我暂时可以在TabSelecting事件中判断,如果当前TabControl没有获得焦点,就取消,不过感觉这是使用一种打补丁的方法来绕这个问题,希望能有更简单一点的方式。 如果焦点不在TabControl上,而是在TabControl的TabPage中的某一输入框,按Ctrl + Tab,就不会走PreviewKeyDown事件,但还是自动切换Tab了!
这个行为,在6.0版本被Log为HotFix的Bug,并且已经被修复
修复之后导致的一个副作用就是像你看到的,父页面无法收到PreviewKeyDown了。我觉得这个可能是一个问题。在后续版本中可以考虑修复一下。
关于目前的版本,有一个神器叫做GcGlobalHook,专治各种疑难杂症。参考以下Code:
// EnableKeyBoardHook先
this.gcGlobalHook.EnableKeyboardHook = true;
private void gcGlobalHook1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Control | Keys.Tab) ||
e.KeyData == (Keys.Control | Keys.Shift | Keys.Tab))
{
System.Diagnostics.Debug.WriteLine("Ctrl+Tab");
if (this.gcTabControl1.ContainsFocus)
{
e.Handled = true;
}
}
}
非常感谢!果然是神器!!! 回复 3楼xjsxjs197的帖子
此贴完结。
如果有新问题欢迎开新帖。
http://gcdn.gcpowertools.com.cn/attachment.aspx?attachmentid=10062
页:
[1]