IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Contrôle Dans l'application


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut Contrôle Dans l'application
    Bonjour,

    J'ai une application répartie en TabPage. Je souhaite récupérer tout les contrôles de toute l'application.
    En effet, lorsque j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim liste As ControlCollection = Me.Controls
    Il me récupère les contrôles mais que de la TabPage[0], or je veux tout ...
    Avez vous une idée ?


    Cordialement,
    Kévin

  2. #2
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Qu'obtiens-tu si tu fais Avant ou après ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim liste As ControlCollection = Me.Controls
    ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    J'obtiens Form1

    Cordialement,

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Je résume la situation, vous aurez sans doute une meilleure idée. Je réalise une application simple avec des boutons que j'ai créer. Ceux-ci possède une autre propriété qui est ACCESSLVL (integer entre 0 et 99). Je me connecte avec une utilisateur qui a un niveau de rôle(0 et 99) . Selon le niveau de l'utilisateur l'application doit rendre visible ces boutons ou pas.

    Donc si le le niveau de l'user est 50 et le bouton 57 alors il ne le verra pas.

    Le code marche dans le cas d'une application sans TABPAGE.

    Cordialement,
    Kévin

  5. #5
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    D'accord merci.

    Si tu mets une TextBox dans un TabPage, cette TextBox ne fait plus parti de la collection de controls de Form1 mais de la collection de controls de ton tabPage.

    Tu dois récupérer la liste de controls de ton Form1(Form1.Controls), de ton TabControl(TabControl1.Controls), et de tes TabPages(TabControl1.TabPages(n).Controls).


    Une fois ta liste remplie, tu pourras la parcourir, tester que ta property existe pour ce control (car dans la liste tu auras aussi des TabPages, label, etc), et si elle existe, tester le ACCESSLEVEL.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci de ta réponse c'est ce que je pensais. Je voulais évitez de faire un traitement de plus pour récupérer tous les contrôles. Existe-t-il une solution plus simple ??? J'ai penser ajouter un événement mais je suis pas très à l'aise avec cette notion.

    Cordialement,
    Kévin

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Ma fonction de traitement de la liste de contrôles est bien en place elle fonctionne. J'avais juste un soucis pour récupérer tout les contrôles ^^.
    Merci de ta réponse.

    Merci de ta réponse c'est ce que je pensais. Je voulais évitez de faire un traitement de plus pour récupérer tous les contrôles. Existe-t-il une solution plus simple ??? J'ai penser ajouter un événement mais je suis pas très à l'aise avec cette notion.

    Cordialement,
    Kévin

  8. #8
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Si tu es frileux avec les events, tu peux mettre une property ACCESSLEVEL à ton tabControl, et dans le SET, tu parcours les tabpages et leurs controls pour répercuter les droits.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     Private _ACCESSLEVEL As Integer
        Public Property ACCESSLEVEL As Integer
            Get
                Return _ACCESSLEVEL
            End Get
            Set(value As Integer)
     
                _ACCESSLEVEL = value
     
                For Each TP As TabPage In TabControl1.TabPages
                    For Each txt As LeTypeDeTesTextBox In TP.Controls
     
                        txt.ACCESSLEVEL = value
     
                    Next
                Next
     
     
            End Set
        End Property

    C'est qu'une idée, il doit y avoir d'autres solutions.

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci pour ta réponse pertinante. C'est une bonne idée mais malheureusement mon tuteur veut que j'utilise les événements ^^ car ce que je réalise est une DLL. De ce fait, l'utilisateur peur choisir comment vas être son application . Donc il est pas nécessaire d'avoir de tabPages. Voici ce que j'ai fait mais je n’y arrive pas ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    Public Class MonButton
        Inherits Button
     
     
        Private _ButtonSource As EnumImage
        Public Property ImageSource() As EnumImage
            Get
                Return _ButtonSource
            End Get
            Set(ByVal value As EnumImage)
                _ButtonSource = value
                If ImageSize = 0 Then
                Else
                    Me.Image = ResManager.Instance.SelectedRessources(value, ImageSize)
                    Me.TextAlign = Drawing.ContentAlignment.MiddleRight
                    Me.ImageAlign = Drawing.ContentAlignment.MiddleLeft
                End If
     
            End Set
        End Property
     
     
        Private _ImageSize As EnumImageSize
        Public Property ImageSize() As EnumImageSize
            Get
                Return _ImageSize
            End Get
            Set(ByVal value As EnumImageSize)
                _ImageSize = value
                If ImageSource = 0 Then
                Else
                    Me.Image = ResManager.Instance.SelectedRessources(ImageSource, value)
                    Me.TextAlign = Drawing.ContentAlignment.MiddleRight
                    Me.ImageAlign = Drawing.ContentAlignment.MiddleLeft
                End If
            End Set
        End Property
     
        Private _NiveauBoutton As Integer
        Public Property NIVEAUBOUTTON() As String
            Get
                Return _NiveauBoutton
            End Get
            Set(ByVal value As String)
                _NiveauBoutton = value
            End Set
        End Property
     
        Public Shadows Event Paint(ByVal sender As Object, ByVal LvlUtilisateur As Integer, ByVal e As PaintEventArgs)
        Public Sub MonButton_Paint(ByVal sender As Object, ByVal NiveauUtilisateur As Integer, ByVal e As PaintEventArgs) Handles Me.Paint
            If NIVEAUBOUTTON = 100 And NiveauUtilisateur = 100 Then
                sender.Visible = True
            ElseIf NIVEAUBOUTTON < NiveauUtilisateur Then
                sender.Enabled = True
            ElseIf NIVEAUBOUTTON > NiveauUtilisateur And NIVEAUBOUTTON = 100 Then
                sender.Visible = False
            Else
                sender.Enabled = False
     
            End If
        End Sub
     
     
     
    End Class
    Ensuite, je ne sais pas comment procéder...
    Pouvez vous m'aider ?

  10. #10
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Sur la théorie, quand ton user se sera connecté, on va "cracher" un event qui stockera ACCESSLVL dans son EventArgs, et tu feras en sorte que tes textbox soient à l'écoute de cette event afin de récupérer l'ACCESSLVL.

    Sur la pratique, si tu n'as jamais fait de gestionnaire d'event, lis d'abord : http://freddyboy.developpez.com/dotnet/articles/events/

    Pour ma part je ne suis pas du tout un expert dans les events, je comprend relativement le principe, mais il y a quelques subtilités qui m'échappent encore, alors je préfère ne pas te dire de bêtises quand à la façon de s'en servir ...

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    A mon avis on peut faire sans évènement

    Tu fais une méthode récursive qui reçoit en paramêtre un contrôle et qui traite son niveau si c'est un bouton et se rappele si c'est un contôle conteneur.

    Parcours de la collection contrôle
    Déterminer le controle par un "Select Case"
    Cas le controle est un bouton traite le niveau
    Cas le controle est un contener (panel, groupbox, tabcontrol -> parcours tabpage, ...) rappel de la méthode avec ce contrôle (ainsi les contrôles enfant seront traité quel que soit le niveau d'imbrication)
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  12. #12
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Un petit exemple pour illustrer

    Un Button (btnMetANiveau), un TextBox (txtNiveau), un Panel, un GroupBox, un TabControl (avec 2 pages)

    La méthode (sub) "AfficheNiveau" affiche ou cache les boutons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
        Private Sub frmManipMesBouton_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            CreMesButton(True)
            CreMesButton(False)
            CreMesButtontp(0)
            CreMesButtontp(1)
        End Sub
     
     
        Sub CreMesButton(ByVal pan As Boolean)
            For i As Integer = 0 To XMax
                For j As Integer = 0 To YMax
                    Btn(i, j) = New MonButton()
                    If pan Then Btn(i, j).Parent = Panel1 Else Btn(i, j).Parent = GroupBox1
                    Btn(i, j).Name = "Button" & i & j
                    Btn(i, j).Text = "Button" & i & j
                    Btn(i, j).Top = (i) * 25
                    Btn(i, j).Left = 20 + (j * 75)
                    Btn(i, j).Tag = i & "|" & j
                    DirectCast(Btn(i, j), MonButton).NIVEAUBOUTTON = Integer.Parse(i & j)
                    If pan Then Panel1.Controls.Add(Btn(i, j)) Else GroupBox1.Controls.Add(Btn(i, j))
                Next
            Next i
        End Sub
     
        Sub CreMesButtontp(ByVal page As Integer)
            For i As Integer = 0 To XMax
                For j As Integer = 0 To YMax
                    Btn(i, j) = New MonButton()
                    Btn(i, j).Parent = TabControl1.TabPages(page)
                    Btn(i, j).Name = "Button" & i & j
                    Btn(i, j).Text = "Button" & i & j
                    Btn(i, j).Top = (i) * 25
                    Btn(i, j).Left = 20 + (j * 75)
                    Btn(i, j).Tag = i & "|" & j
                    DirectCast(Btn(i, j), MonButton).NIVEAUBOUTTON = Integer.Parse(i & j)
                    TabControl1.TabPages(page).Controls.Add(Btn(i, j))
                Next
            Next i
        End Sub
     
        Private Sub btnMetANiveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMetANiveau.Click
            AfficheNiveau(Me, Integer.Parse(txtNiveau.Text))
        End Sub
     
        Sub AfficheNiveau(ByVal ctrl As Control, ByVal niveau As Integer)
            For Each c As Control In ctrl.Controls
                Select Case True
                    Case TypeOf c Is MonButton
                        c.Visible = (DirectCast(c, MonButton).NIVEAUBOUTTON < niveau)
                    Case TypeOf c Is Panel
                        AfficheNiveau(c, niveau)
                    Case TypeOf c Is GroupBox
                        AfficheNiveau(c, niveau)
                    Case TypeOf c Is TabControl
                        For Each tp As TabPage In DirectCast(c, TabControl).TabPages
                            AfficheNiveau(tp, niveau)
                        Next
                End Select
            Next
        End Sub
     
    End Class
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  13. #13
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 57
    Par défaut
    Merci pour ton exemple qui est très instructive, il est simple et facile à comprendre malheureusement je dois utiliser la gestion d'évènements car ceci est plus technique pour mon stage mais je te remercie beaucoup (+1)

  14. #14
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Par défaut
    Bonjour,

    Ce n'est pas plus technique, c'est simplement des approches différentes.
    Mais l'idée avec évènement est très intéressante car elle rend les boutons plus autonomes. (et cela correspond bien à Windows qui est évènementiel)
    Cela doit aussi être plus performant puisque les boutons seront ciblés directement (par rapport au récursif qui va parcourir tous les contrôles existant)
    Parfois il faut se casser un peu la tête pour obtenir de joli résultat

    Puisqu'il n'y a pas de réponse, je te propose donc la solution avec Event.

    Le bouton perso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Imports WindowsApplication2.clsEventPerso
     
    Public Class MonButton
        Inherits Button
     
        Private _NiveauBouton As Integer
        Public Property NiveauBouton() As Integer
            Get
                Return _NiveauBouton
            End Get
            Set(ByVal value As Integer)
                _NiveauBouton = value
            End Set
        End Property
     
        Public Sub New()
            MyBase.New()
            AddHandler EventNiveau, AddressOf OnEtatBouton
        End Sub
     
        Sub OnEtatBouton(ByVal sender As System.Object, ByVal eai As EventArgsInt)
            Me.Visible = (NiveauBouton < eai.Nombre)
        End Sub
     
        ' voir pour définir le removehandler ----- très important de mettre en oeuvre ------ pour les fuites mémoire
        'removeHandler(EvtTypeInt, AddressOf OnEtatBouton)
     
        'Public Shared Event EventNiveau As EventHandlerInt
        'Public Shared Sub EnvoieEventNiveau(ByRef o As Object, ByVal niveau As Integer)
        '    RaiseEvent EventNiveau(o, New EventArgsInt(niveau))
        'End Sub
     
    End Class
    J'ai corrigé le nom (un seul t) et surtout les types de la propriété qui était moitié "Integer" et "String" (générait un bug)

    La classe Event perso, tiré du lien donné par _Ez3kiel que J'avais déjà utilisé pour des event chaine de caractère. J'en ai profité pour en rajouter un sur les entiers
    Je ne met que celui sur les integer, pour ne pas surcharger le post, mais il est très facile d'en faire sur le même principe avec des string, ou plusieurs paramètres, même des objets ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Namespace clsEventPerso
     
        ''' <summary>délégué permettant de créer un Event avec un paramètre de type entier (integer).</summary>
        ''' <remarks>Les évènements sont manipulés avec les délégués, nous devons donc établir un EventHandlerInt en tant que délégué</remarks>
        Public Delegate Sub EventHandlerInt(ByVal sender As Object, ByVal e As EventArgsInt)
     
        ''' <summary>Classe EventArgsInt : évènement personnalisé hérité d'"EventArgs" ayant un paramètre entier (integer).</summary>
        ''' <remarks>Tiré du Tuto A la découverte des événements en .NET sur Developpez.com</remarks>
        Public Class EventArgsInt
            Inherits EventArgs
     
            ''' <summary>évènement avec un paramètre de type entier.</summary>
            ''' <param name="Nombre">nombre a transmettre.</param>
            Public Sub New(ByVal Nombre As Integer)
                MyBase.New()
                Me.mNombre = Nombre ' note le nombre à transmettre lors de la création de l'évènement. (utilisation de mNombre obligatoire puisque ReadOnly)
            End Sub
     
            ''' <summary>Le nombre qui pourra être récupéré à travers le 2ème paramètre de la méthode abonné à cet évènement.</summary>
            Private mNombre As String
            Public ReadOnly Property Nombre As String
                Get
                    Return mNombre
                End Get
            End Property
     
        End Class
     
    End Namespace
    Un module pour définir les events
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Imports WindowsApplication2.clsEventPerso
    Module ModGen
        Public Event EventNiveau As EventHandlerInt
        Public Sub EnvoieEventNiveau(ByRef o As Object, ByVal niveau As Integer)
            RaiseEvent EventNiveau(o, New EventArgsInt(niveau))
        End Sub
    End Module
    La partie test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
        Private Sub frmManipMesBouton_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            CreMesButton(True)
            CreMesButton(False)
            CreMesButtontp(0)
            CreMesButtontp(1)
        End Sub
     
        Private Sub btnMetANiveau_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMetANiveau.Click
            EnvoieEventNiveau(Me, Integer.Parse(txtNiveau.Text))
            'AfficheNiveau(Me, Integer.Parse(txtNiveau.Text))
        End Sub
     
        Sub CreMesButton(ByVal pan As Boolean)
            For i As Integer = 0 To XMax
                For j As Integer = 0 To YMax
                    Btn(i, j) = New MonButton()
                    If pan Then Btn(i, j).Parent = Panel1 Else Btn(i, j).Parent = GroupBox1
                    Btn(i, j).Name = "Button" & i & j
                    Btn(i, j).Text = "Button" & i & j
                    Btn(i, j).Top = (i) * 25
                    Btn(i, j).Left = 20 + (j * 75)
                    Btn(i, j).Tag = i & "|" & j
                    DirectCast(Btn(i, j), MonButton).NiveauBouton = Integer.Parse(i.ToString & j.ToString)
                    If pan Then Panel1.Controls.Add(Btn(i, j)) Else GroupBox1.Controls.Add(Btn(i, j))
                Next
            Next i
        End Sub
     
        Sub CreMesButtontp(ByVal page As Integer)
            For i As Integer = 0 To XMax
                For j As Integer = 0 To YMax
                    Btn(i, j) = New MonButton()
                    Btn(i, j).Parent = TabControl1.TabPages(page)
                    Btn(i, j).Name = "Button" & i & j
                    Btn(i, j).Text = "Button" & i & j
                    Btn(i, j).Top = (i) * 25
                    Btn(i, j).Left = 20 + (j * 75)
                    Btn(i, j).Tag = i & "|" & j
                    DirectCast(Btn(i, j), MonButton).NiveauBouton = Integer.Parse(i.ToString & j.ToString)
                    TabControl1.TabPages(page).Controls.Add(Btn(i, j))
                Next
            Next i
        End Sub
     
        ' toujours présent pour info : autre méthode sans event par parcours récursif des contrôles
        Sub AfficheNiveau(ByVal ctrl As Control, ByVal niveau As Integer)
            For Each c As Control In ctrl.Controls
                Select Case True
                    Case TypeOf c Is MonButton
                        c.Visible = (DirectCast(c, MonButton).NiveauBouton < niveau)
                    Case TypeOf c Is Panel
                        AfficheNiveau(c, niveau)
                    Case TypeOf c Is GroupBox
                        AfficheNiveau(c, niveau)
                    Case TypeOf c Is TabControl
                        For Each tp As TabPage In DirectCast(c, TabControl).TabPages
                            AfficheNiveau(tp, niveau)
                        Next
                End Select
            Next
        End Sub
     
    End Class
    Bon j'espère ne rien avoir oublier.
    Il est un peu tard (ou tôt)

    Bon code.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/01/2016, 14h09
  2. Contrôle dans l'application Android ou dans une page PHP ?
    Par CestPasFaux dans le forum Android
    Réponses: 7
    Dernier message: 30/06/2010, 11h48
  3. Réponses: 4
    Dernier message: 03/10/2007, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo