TabControl en vb.Net [Résolu]

Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
- 16 sept. 2011 à 10:00
Bonjour,

Je voudrais utiliser le contrôle TabControl. Mais problème !!

Il semble qu'en .NET, il est impossible de rendre invisible un onglet (contrairement à VB6). Sur la plupart des forums et chez microsoft, il faut supprimer l'onglet, avec :
TabControl1.TabPages.RemoveAt(0)

Puis le recréer avec :
TabControl1.TabPages.Insert(0, "cool mais tout perdu !")


Très bien, sauf... qu'on perds par la même occasion tous les contrôles contenues dans l'onglet !
... et c'est grave docteur !

Connaissez-vous un remède ?


Amicalement,
Us.

=> TablControl.NET, avant RichTexBox.NET... Combien de contrôle plus merdiques en .NET que sous VB6 ??
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Ben

en variable générale :
Dim TempTab As TabPage

à l'effacement :
TempTab = TabControl1.TabPages(0)
TabControl1.TabPages.RemoveAt(0)

au rétablissement :
TabControl1.TabPages.Insert(0, TempTab)


Essaye (moi, je ne le peux pas - pas VB.Net)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
3
Merci
Tu peux toujours, en effet, utiliser un tableau d'objets typé Tabpage et rien ne t'empêche alors d'en mettre tel ou tel autre élément = ce que tu veux, y compris nothing.

Tu peux également penser à dresser un tableau des hwnd des tabpages contenus dans ton contrôle et les traiter, puisque ce sont des fenêtres (filles mais fenêtres) Windows, avec la fonction ShowWindow de la librairie User32 de l'Api de Window.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bonjour,
pourquoi ne pas essayer de mettre dans une variable avant de supprimer, puis de réinsérer la variable ?
Du genre :
TempTab = TabControl1.TabPages(0)
TabControl1.TabPages.RemoveAt(0)


puis, plus tard quand tu le veux :

TabControl1.TabPages.Insert(0, TempTab)


Enfin ... je n'en sais rien ... je dis peut-être une bêtise, là !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
Bien sur : si tu essayes, n'oublie pas de typer avant :
Dim TempTab As TabPage



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Ouais, je fais comment avec la variable ? c'est quoi ici ?

Imagines, si tu as un Label et une TextBox dans l'onglet Tapages(0) du contrôle TabControl1... La variable doit contenir la copie de l'ensemble du label, et de la textbox.... Bref, la brasse coulé pour moi... Si tu sais ?

Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Dim TempTab As TabPage

Ensuite ?

Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Yesss ! T'es un chef !

Il faut mettre
Dim TempTab As TabPage

en variable globale.

Merci.

Ensuite, c'est surement encore un peu du bricolage car la propriété Visible pour un onglet n'existe pas, mais bon, on arrive déjà au bon résultat.

Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Re,

Au vu de la perte de temps pour faire un truc potable, j'abandonne ces TabControls...

Je met un début de gestion pour la visibilité des onglets, au cas où cela intéresse quelqu'un.


Dim TempPag() As TabPage ' pour gestion Visible des onglets de TabControl



    ' initialisation form
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

        ' onglets de Tabcontrol pour gestion Visible des onglets : ATTENTION NOMBRE STATIQUE DEFINI DANS LA FORM
        ReDim TempPag(TabControl1.TabPages.Count - 1) ' réserve le nombre d'élément
        TempPag(0) = TabControl1.TabPages(0) ' on doit l'initialiser par un élément

      End Sub



    ' Gestion 'bricolée' de la fonction Visible pour les onglets de TabContol (n'existe plus en natif, bravo Microsoft !)
    Sub TabControlPageVisible(ByVal TextPage As String, ByVal Visible As Boolean, Optional ByVal InsertionPosition As Integer = 0)

        ' Recherche si l'onglet est déjà visible ?
        For t = 0 To TabControl1.TabPages.Count - 1
            If TabControl1.TabPages.Item(t).Text = TextPage Then
                If Visible Then
                    Exit Sub ' rien à faire
                Else
                    TempPag(t) = TabControl1.TabPages(t) ' sauvegarde
                    TabControl1.TabPages.RemoveAt(t)     ' supprimer
                    Exit Sub
                End If
            End If
        Next

        ' Pas visible. Recherche l'onglet temporaire qui porte le titre TextPage et le rajoute

        If Visible Then
            For t = 0 To TempPag.Length - 2
                If TempPag(t).Text = TextPage Then
                    TabControl1.TabPages.Insert(InsertionPosition, TempPag(t))
                End If
            Next
        End If

    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'supprime 
        TabControlPageVisible("TabPage1", False)
    End Sub



    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        'rajoute
        TabControlPageVisible("TabPage1", True, 1)
    End Sub



Amicalement,
Us.
Commenter la réponse de us_30
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
C'est çà !
et ce serait encore mieux, après chaque "réinsertion", de libérer Tempag de la mémoire (= nothing ?).
Juste pour éviter que, d'un "visible" à un "invisible", redevenu "visible" puis "invisible" etc... le processeur finisse par devenir déboussolé
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Dernière intervention
14 mars 2016
0
Merci
Oui, mais, c'est trop lourd à gérer comme ça... Je veux dire qu'il faudrait refaire tout ça dans un 'Public Property' ou quelque comme ça, pour que cela soit vraiment pratique.

Quant à libérer de la mémoire, si plusieurs onglets sont invisibles c'est pas facile.
Sauf peut-être si on peut faire : TempPag(t)=Nothing ?

Amicalement,
Us.
Commenter la réponse de us_30

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.