Tastaturbehandlung für TabControl ist ziemlich ungewöhnlich, löst das KeyDown-Ereignis aus, auch wenn ein untergeordnetes Steuerelement den Fokus hat. Wenn Sie jedoch e.Handled = true festlegen, wird der Tastendruck nicht unterdrückt. Etwas von einem Fehler. Es gibt zwei grundlegende Möglichkeiten, diese Einschränkung zu umgehen: Sie müssen die geschützte ProcessCmdKey() -Methode überschreiben. Die erste besteht darin, eine eigene Klasse aus TabControl abzuleiten, die normalerweise wünschenswert ist, wenn Sie aus anderen Gründen mit dem Steuerelement herumspielen wollen. Wie folgt aus:
using System;
using System.Windows.Forms;
public class MyTabControl : TabControl {
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Tab | Keys.Control) ||
keyData == (Keys.Tab | Keys.Control | Keys.Shift)) {
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Ihr Programm erstellen und die neue Steuerung von der oben in der Toolbox fallen, ersetzt die vorhandenen.
Die andere Möglichkeit ist es, den Tastendruck abzufangen, bevor er das Tab-Steuerelement erreichen kann. Mehr eine Schinderei, da Sie darauf achten müssen, um die Steuerung den Fokus hat und ob es ist ein Kind der Registerkarte, kopieren/fügen Sie diesen Code in das Formular Klasse:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
var ctl = this.ActiveControl;
while (ctl != null) {
if (ctl == myTabControl1) {
if (keyData == (Keys.Tab | Keys.Control) ||
keyData == (Keys.Tab | Keys.Control | Keys.Shift)) {
return true;
}
}
ctl = ctl.Parent;
}
return base.ProcessCmdKey(ref msg, keyData);
}
Ersetzen „TabControl1“ mit dem Namen deiner Kontrolle.