TabControl en vb.Net

Résolu
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 15 sept. 2011 à 17:09
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur 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 ??

10 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 sept. 2011 à 17:52
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 sept. 2011 à 10:00
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
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 sept. 2011 à 17:42
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 sept. 2011 à 17:46
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 sept. 2011 à 17:48
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 sept. 2011 à 17:49
Dim TempTab As TabPage

Ensuite ?

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 sept. 2011 à 18:05
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 sept. 2011 à 20:24
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 sept. 2011 à 20:49
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
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
15 sept. 2011 à 21:04
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.
0
Rejoignez-nous