TabControl的具有相当不寻常的处理来处理Tab键。它重写ProcessKeyPreview()方法来检测Ctrl/Shift/Tab,然后在其OnKeyDown()方法中实现选项卡选择。它可以做到这一点,因此它既可以检测按键,也可以检测任何子控件的焦点。并避免通过其子控件之一加强自定义Tab键处理。您可以通过重写ProcessCmdKey()来使其工作,但是您会中断要响应选项卡的子控件。
最好的办法是重写它的OnKeyDown()方法。为您的项目添加一个新类并粘贴下面显示的代码。编译。将新的选项卡控件从工具箱的顶部拖放到表单上。
using System;
using System.Windows.Forms;
class MyTabControl : TabControl {
protected override void OnKeyDown(KeyEventArgs e) {
if (e.KeyCode == Keys.Tab && (e.KeyData & Keys.Control) != Keys.None) {
bool forward = (e.KeyData & Keys.Shift) == Keys.None;
// Do your stuff
//...
}
else base.OnKeyDown(e);
}
}
请注意,您还应该考虑Ctrl + PageUp和Ctrl + PageDown。
你可以提供一些细节如何扩展切换? – 2009-12-09 10:26:47
我添加了Form KeyUp/KeyDown的事件处理程序 – Piglet 2009-12-09 10:36:22
和Form.KeyPreview = ...? – 2009-12-09 10:38:45