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 :

[VB.Net] Comment lister les controles avec Icontainer ?


Sujet :

VB.NET

  1. #1
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut [VB.Net] Comment lister les controles avec Icontainer ?
    Bonjour a tous

    Comment faire pour lister les controles qui ce trouve dans on container de type Panel ?

    Voila ce que j'ai fait vite fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For each Ctrl as Control In Controls
     
    If Ctrl is Icontainer Then 
    ...
     
    End If
    Next
    Mais sa ne fonctionne pas !
    j'doit pas etre sur la bonne piste, y a certainement un autre moyen

    Merci a tous

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Il sert à quoi ton "If Ctrl is Icontainer Then" ???
    Le foreach suffit.
    Et pour info, t'as pas besoin de parler de container.
    Un control contient une propriété 'Controls', quel qu'il soit. C'est juste qu'on s'en sert rarement pour les boutons ou les textboxes

  3. #3
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Le for each liste effectivement les controls mais pas ceux qui sont dans un container

    Faire un simple test

    Une form avec un Panel et dans le Panel mettre un bouton ou un autre controle
    - Dans la form mettre un bouton (en dehor du panel)

    le resultat sera que le bouton de la form et le panel sera lister et pas le bouton qui ce trouve dans le panel ...

    Le if que je fait c'est simplement pour tester si le controle est un container et faire une autre boucle en utilisant le controle qui est lui un container pour lister les controles qui sont dedans

    y'a peut etre plus simple a faire mais je vois pas !

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par troxsa
    le resultat sera que le bouton de la form et le panel sera lister et pas le bouton qui ce trouve dans le panel ...
    Bah c'est normal !!! Ton second bouton il N'EST PAS DANS LA FORM, il est dans le panel.

    Il faut voir les controles non pas comme une collection, mais une arborescence.
    - Form
    - - Bouton 1
    - - Panel
    - - - Bouton2

    Maintenant si tu veux la liste de tous les sous controles et de leurs sous controles, faut faire de la récursion :

    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
     
    private void ParcoursControles(Control ctrl)
    {
      // on boucle sur ses sous-controles
      foreach(Control subctrl in ctrl.Controls)
      {
        // ici tu colles ton code
        System.Diagnostics.Debug.WriteLine("Control:"+subctrl.ToString());
        // si il a des sous controles
        if((ctrl.Controls != null)
          && (ctrl.Controls.Count > 0)
            // on fait un appel récursif
            this.ParcoursControles(subctrl);
      }
    }

  5. #5
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Voila la traduction en vb.net d'apres moi :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Sub ParcourControle(ByVal ctrl As Control)
            For Each Contr As Control In ctrl.Controls
                Console.WriteLine(Contr.Name)
                ParcourControle(Contr)
            Next
        End Sub
    Dite le moi si j'me plante
    enfin ce bout de code fonctionne quand meme !

    Merci de ton aide !

    A bientot

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Juste pour optimiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub ReadControls(ByVal ctrl As Control)
            For Each c As Control In ctrl.Controls
                Console.WriteLine(c.Name)
                If c.Controls.Count > 0 Then ReadControls(c)
            Next
    End Sub
    Sinon pour répondre à ta toute première question MSDN donne sa définition de Container pour le framework
    Notes
    La classe Container est l'implémentation par défaut pour l'interface IContainer.
    Les conteneurs sont des objets qui encapsulent et effectuent le suivi de zéro ou plusieurs composants. Dans ce contexte, la relation contenant-contenu fait référence à une relation logique plutôt que visuelle. Vous pouvez utiliser des composants et des conteneurs dans divers scénarios, notamment des scénarios à la fois visuels et non visuels.
    Les composants d'un conteneur sont suivis dans une liste FIFO (premier entré, premier sorti), qui définit également leur ordre dans le conteneur. Les composants ajoutés sont insérés à la fin de la liste.
    Voilà pas nécessairement de lien direct avec les contrôles graphiques d'une Form ok
    Selon ta définition plutôt graphique des choses alors un bouton peut aussi être considéré comme un container n'est-ce pas
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Merci Monsieur neguib !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/09/2006, 12h44
  2. [VB6] Comment lister les controles d'un frame ?
    Par enibris dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 15/04/2006, 10h58
  3. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 15h24
  4. [VB.NET] Comment lister les ordinateurs d'un réseau
    Par Jan-t dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/03/2005, 09h44

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