164 votes

Comment masquer la page d'onglet du contrôle d'onglet ?

Comment masquer la TabPage du TabControl dans WinForms 2.0 ?

2 votes

@tomaszs , vous pouvez essayer de supprimer une page d'onglet comme TabPage page2 = tabControl1.TabPages[tpAdministration.Name ] ; tabControl1.TabPages.Remove(page2) ;

141voto

Marc Gravell Points 482669

Non, ça n'existe pas. Vous devez retirer l'onglet et le réinsérer quand vous le voulez. Ou utiliser un autre contrôle d'onglet (tiers).

3 votes

Mais RemoveByKey() + Add() fonctionnent parfaitement.

3 votes

Une des frustrations est que RemoveByKey puis Add plus tard bouleverse l'ordre.

0 votes

@VinkoVrsalovic c'est ce que cette réponse dit essentiellement... "supprimer l'onglet et le réinsérer" - elle ne donne simplement pas le code pour le faire. De plus, en disant essentiellement que ce n'est pas "possible", cela implique que le fait d'essayer pose des problèmes, dont l'un est l'ordre des onglets...

110voto

moonshine Points 276

Extrait de code pour masquer une page d'onglet

private void HideTab1_Click(object sender, EventArgs e)
{
    tabControl1.TabPages.Remove(tabPage1);
}

Extrait de code pour l'affichage d'une page d'onglet

private void ShowTab1_Click(object sender, EventArgs e)
{
    tabControl1.TabPages.Add(tabPage1);
}

0 votes

Dans quelle version de WInForms cela fonctionne-t-il réellement ?

0 votes

Le seul problème que cela pose, c'est lorsque, par exemple, vous essayez de masquer une barre de menu qui sera ajoutée au parent MDI. La suppression de l'onglet libère tous les événements et la fusion du menu.

2 votes

Ou en option : int idx = tabControl1.TabPages.IndexOf(tabPage1); tabControl1.TabPages.RemoveAt(idx);

31voto

amazedsaint Points 5712

La propriété Visiblity n'a pas été implémentée sur les pages d'onglets, et il n'y a pas non plus de méthode Insert.

Vous devez insérer et supprimer manuellement les onglets.

Voici un moyen de contourner ce problème.

http://www.dotnetspider.com/resources/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx

23voto

profimedica Points 371

Variante 1

Afin d'éviter le klikering visuel, vous devrez peut-être utiliser :

bindingSource.RaiseListChangeEvent = false 

o

myTabControl.RaiseSelectedIndexChanged = false

Supprimer un onglet :

myTabControl.Remove(myTabPage);

Ajouter une page à onglet :

myTabControl.Add(myTabPage);

Insérer une page à onglet à un endroit précis :

myTabControl.Insert(2, myTabPage);

N'oubliez pas d'annuler les changements :

bindingSource.RaiseListChangeEvent = true;

o

myTabControl.RaiseSelectedIndexChanged = true;

Variante 2

myTabPage.parent = null;
myTabPage.parent = myTabControl;

2 votes

Variante 2 - parfaite tabPage1.Parent = myBoolVariable ? tabControl1 : null;

1 votes

La variante 2 est intéressante, mais lorsque vous rétablissez le parent, la page de l'onglet sera ajoutée à la fin de la liste au lieu de sa position précédente.

0 votes

System.Windows.Forms.TabControl ne semble pas définir RaiseSelectedIndexChanged .

4voto

Mhdali Points 235

Créez une nouvelle classe vide et placez-y ceci :

using System.Windows.Forms;

namespace ExtensionMethods
{
    public static class TabPageExtensions
    {

        public static bool IsVisible(this TabPage tabPage)
        {
            if (tabPage.Parent == null)
                return false;
            else if (tabPage.Parent.Contains(tabPage))
                return true;
            else
                return false;
        }

        public static void HidePage(this TabPage tabPage)
        {
            TabControl parent = (TabControl)tabPage.Parent;
            parent.TabPages.Remove(tabPage);
        }

        public static void ShowPageInTabControl(this TabPage tabPage,TabControl parent)
        {
            parent.TabPages.Add(tabPage);
        }
    }
}

2- Ajouter une référence à l'espace de nom ExtensionMethods dans le code de votre formulaire :

using ExtensionMethods;

3- Vous pouvez maintenant utiliser yourTabPage.IsVisible(); pour vérifier sa visibilité, yourTabPage.HidePage(); pour le cacher, et yourTabPage.ShowPageInTabControl(parentTabControl); pour le montrer.

0 votes

Cela ne fonctionnera comme prévu que pour la dernière page. Toutes les autres pages seront déplacées vers la fin lors de l'affichage.

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