TabControl has fairly unusual processing to handle the Tab key. It overrides the ProcessKeyPreview() method to detect Ctrl/Shift/Tab, then implements the tab selection in its OnKeyDown() method. It does this so it can detect the keystroke both when it has the focus itself as well as any child control. And to avoid stepping on custom Tab key processing by one of its child controls. You can make it work by overriding ProcessCmdKey() but then you'll break child controls that want to respond to tabs.
Best thing to do is to override its OnKeyDown() method. Add a new class to your project and paste the code shown below. Compile. Drop the new tab control from the top of the toolbox onto your form.
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);
}
}
Beware that you also ought to consider Ctrl+PageUp and Ctrl+PageDown.