TabControl a un traitement assez inhabituel pour gérer la touche Tab. Il remplace la méthode ProcessKeyPreview() pour détecter Ctrl/Shift/Tab, puis implémente la sélection d'onglet dans sa méthode OnKeyDown(). Il le fait afin qu'il puisse détecter la frappe à la fois lorsqu'il a le focus lui-même ainsi que tout contrôle enfant. Et pour éviter de traiter le traitement des touches de tabulation personnalisé par l'un de ses contrôles enfants. Vous pouvez le faire en remplaçant ProcessCmdKey(), mais vous cassez les contrôles enfants qui veulent répondre aux onglets.
La meilleure chose à faire est de surcharger sa méthode OnKeyDown(). Ajoutez une nouvelle classe à votre projet et collez le code ci-dessous. Compiler. Déposez le nouveau contrôle onglet du haut de la boîte à outils sur votre formulaire.
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);
}
}
Attention, vous devez également prendre en compte Ctrl + PageUp et Ctrl + PageDown.
Pouvez-vous donner des détails sur la façon dont vous avez prolongé la commutation? –
Ive a ajouté un gestionnaire d'événements pour Form KeyUp/KeyDown – Piglet
Et Form.KeyPreview = ...? –