2010-10-22 4 views
2

En C# utilisant VS2005 J'ai un Winforms TabControl avec 7 onglets, mais je veux que le dernier onglet ne soit visible que si une certaine option de configuration est définie.comment définir un onglet TabControl pour être invisible

Comment faire pour que TabControl affiche uniquement les six premiers onglets? En d'autres termes, comment rendre le septième onglet non visible?

+0

Possible duplicate: http://stackoverflow.com/questions/552579/how-to-hide-tabpage-from-tabcontrol – prostynick

+0

duplicata possible de [Masquage et affichage des onglets dans tabControl] (http://stackoverflow.com/questions/3365025/hiding-and-showing-tabpages-in-tabcontrol) –

Répondre

1
private void HideTab(object sender, EventArgs e) 
{ 
    this.tabControl1.TabPages.Remove(this.tabPage2); 
} 
private void ShowTab(object sender, EventArgs e) 
{ 
    this.tabControl1.TabPages.Add(this.tabPage2); 
} 

this.tabPage2 est votre 7 tabpage, quel que soit le nom que vous lui donnez.

+0

Cela ne suffit pas, la page supprimée et ses contrôles vont fuir en permanence. Le suivi des pages supprimées et l'appel de Dispose() lorsque le formulaire est fermé est requis. –

+0

@Hans. Eh, non, ça ne marchera pas si le formulaire est fermé. Sauf si vous donnez la référence à d'autres objets. this.tabPage2 est référencé par le formulaire qui le contient, lorsque ce formulaire est fermé, le garbage collector fera le travail pour vous. –

+1

Non, TabControl.Dispose() disposera automatiquement les pages. Ce qui est appelé par Form.Dispose() itérant la collection Controls. Mais il ne peut pas lorsque la page a été supprimée. La référence tabPage2 n'est pas assez bonne, elle n'est pas incluse dans la collection Controls. –

0

Non, il n'est pas possible de masquer un onglet dans tabcontrol. Si vous ajoutez les onglets à l'exécution, n'ajoutez pas le 7ème onglet si la condition n'est pas satisfaite.

Si vous avez terminé la conception, enlevez la languette si la condtion a échoué.

yourTabControl.TabPages.Remove(tabPageName); 
0

vous pouvez mettre en œuvre une propriété

public bool TabVisible 
{ 
    get 
    { 
     return tabControl1.Contains(tabPage2); 
    } 
    set 
    { 
     if(value == TabVisible) return; 
     if(value) 
      tabControl1.TabPages.Add(tabPage2); 
     else 
      tabControl1.TabPages.Remove(tabPage2); 
    } 
} 

vous devez également remplacer votre fonction disposition,

vous pouvez déplacer la fonction Dispose du concepteur code généré à votre propre code, le concepteur remarque cela. vous voyez que la fonction components.Dispose(); ne peut plus atteindre la tabPage pour la mise au rebut, vous devez donc la mettre au rebut manuellement si elle n'a pas été éliminée. d'autre part, surtout si vous ouvrez votre fenêtre plusieurs fois, vous n'avez plus de poignées de fenêtre

Questions connexes