75 votes

Comment puis-je désactiver un onglet dans TabControl?

Est-il possible de désactiver un onglet dans un onglet de contrôle?

J'utilise C #.

86voto

Convertissez votre TabPage en un contrôle, puis définissez la propriété Enabled sur false.

 ((Control)this.tabPage).Enabled = false;
 

Par conséquent, l'en-tête de la page d'onglet sera toujours activé, mais son contenu sera désactivé.

70voto

Hans Passant Points 475940

La classe TabPage n'a pas de propriété Enable. Vous pouvez obtenir un effet similaire en définissant simplement la propriété Enable des contrôles de cette page. Cela évite également le problème du traitement d'un TabControl qui n'a qu'une page. Par exemple:

 public static void EnableTab(TabPage page, bool enable) {
    foreach (Control ctl in page.ctls) ctl.Enabled = enable;
}
 

63voto

Lecsox Points 366

Vous pouvez utiliser simplement:

 tabPage.Enabled = false;
 

Cette propriété n'est pas affichée mais fonctionne sans problème.

Vous pouvez programmer l'événement de sélection sur TabControler pour qu'il soit impossible de passer à un onglet non modifiable:

 private void tabControler_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = !e.TabPage.Enabled;
}
 

43voto

Stormenet Points 8695

Vous pouvez enregistrer l'événement "Sélection" et annuler la navigation vers la page à onglet:

 private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    if (e.TabPage == tabPage2)
        e.Cancel = true;
}
 

Une autre idée est de mettre tous les contrôles de la page à onglet dans un contrôle de panneau et de désactiver le panneau! Smiley

Vous pouvez également supprimer la page d'onglet de la collection tabCopntrol1.TabPages. Cela cacherait la page de tabulation.

les crédits vont à littleguru @ channel 9

13voto

Stewart Points 2275

Sans doute, vous voulez voir l'onglet dans l'onglet contrôle, mais vous voulez qu'il soit "désactivé" (c'est à dire, en grisé et ne peut pas être sélectionnée). Il n'y a pas de prise en charge intégrée pour cela, mais vous pouvez remplacer le dessin mécanisme pour donner l'effet désiré.

Un exemple de la façon de le faire est fourni ici.

La magie est dans cet extrait de code à partir de la source, et dans le DisableTab_DrawItem méthode:

this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
this.tabControl1.DrawItem += new DrawItemEventHandler( DisableTab_DrawItem );

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X