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 2008] Collection de noeuds dans un treeview


Sujet :

VB.NET

  1. #1
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut [VB 2008] Collection de noeuds dans un treeview
    Bonjour à tous,

    Y'a pas une collection dans un TreeView qui contient TOUS les noeuds, peut importe leur niveau?

    Mon but est de chercher un noeud et de retourner le chemin d'accès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For each noeud in TreeView.Nodes
       If noeud.Name = "Blabla" Then
          chemin = noeud.FullPath
       End If
    End For
    Je sais que ça fonctionne pas car la collection .Nodes ne renvoi que les noeuds du premier niveau.

    Le seul moyen de faire cela est-il de me promener niveau par niveau avec plusieurs boules For?

    Merci
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    une sub récursive est mieux que plusieurs boucles for

    et le seul moyen d'avoir une collections de tous les noeuds, c'est de la faire soi meme (j'image que c'est toi qui ajoute les noeuds ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    C'est ce que je pensais pour la liste des noeuds, je trouvais rien de concluant.

    Pour la sub récursive, je suis pas très familier avec le principe, je vais vérifier de ce côté..

    MErci Sperot
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    exemple de récursivité qui ajoute tous les noeuds à une collection :

    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
     
    Private _Coll as List(Of TreeNode)
     
     
    Private Sub RemplissageColl()
        AddNodesToColl(MonTreeView.Nodes)
    End Sub
     
     
     
    Private Sub AddNodesToColl(NodesNiveau as TreeNodeCollection)
     
        For Each tn as Treenode In NodesNiveau 
            _Coll.Add(tn)
            AddNodesToColl(tn.Nodes)
        Next
     
    End Sub
    donc y a un point de départ, un paramètre de sub qui change
    au premier tour, tous les nodes tu treeview vont être ajoutés et en meme temps, la sub va etre appelée avec tous ses sous nodes en paramètre
    etc....

    for each ne rentre pas dans la sub si la collection est vide, donc arrivé au bout d'une branche ca redescend d'un niveau

    suivre en pas à pas et regardant la pile d'appel peut aider à comprendre le processus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Citation Envoyé par sperot51 Voir le message
    exemple de récursivité qui ajoute tous les noeuds à une collection :

    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
     
    Private _Coll as List(Of TreeNode)
     
     
    Private Sub RemplissageColl()
        AddNodesToColl(MonTreeView.Nodes)
    End Sub
     
     
     
    Private Sub AddNodesToColl(NodesNiveau as TreeNodeCollection)
     
        For Each tn as Treenode In NodesNiveau 
            _Coll.Add(tn)
            AddNodesToColl(tn.Nodes)
        Next
     
    End Sub
    Erreur sur la ligne:
    Object reference not set to an instance of an object.
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  6. #6
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Je comprends pas l'erreur de ton code, mais je n'avais pas besoin de monter une liste. Voici donc mon code fonctionnel qui cherche le chemin complet associé au noeud cherché.

    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
            Public chemin As String = ""
     
    Private Function Seek_Path(ByVal NodesNiveau As TreeNodeCollection, ByVal Seeked_Node As String)
            For Each tn As TreeNode In NodesNiveau
                '_Coll.Add(tn)
                If tn.Text = Seeked_Node Then
                    If chemin = "" Then
                        chemin = tn.FullPath & "\"
                    End If
                    Exit For
                Else
                    Seek_Path(tn.Nodes, Seeked_Node)
                End If
            Next
            Return chemin
    End Function
    Et j'appelle la fonction comme suit (imbriquer dans une autre fonction..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            open_item_window(DipLine, trouver_chemin(Explo_win.TreeView.Nodes, TBLine.Text))
            Fonction.chemin = ""
    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  7. #7
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    Ah euh...j'oubliais...

    Merci beaucoup!

    héhé

    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    mon erreur était de mettre
    Private _Coll as List(Of TreeNode)
    au lieu de
    Private _Coll as New List(Of TreeNode)

    cette erreur est la plus simple à déceler pourtant ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre averti Avatar de Faladin
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2007
    Messages : 333
    Points : 305
    Points
    305
    Par défaut
    cette erreur est la plus simple à déceler pourtant ...
    sperot51
    Expert Confirmé Sénior
    Date d'inscription: avril 2007
    Messages: 2 133

    VS

    Faladin
    Membre régulier
    Date d'inscription: juillet 2007
    Messages: 126

    .......

    Je suis pas de taille...Merci de m'encourager

    Même GoogleFight te donne vainqueur

    "Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live."
    John F. Woods


    JP

    Pour commencer en VB.Net: PLASSERRE!

    ou traducteur-sms.com

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

Discussions similaires

  1. Rendre invisible un noeud dans un treeview
    Par atb dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/05/2007, 07h55
  2. Sélection d'un noeud dans un treeview
    Par saphir54321 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/04/2007, 09h54
  3. [VB.NET] Trouver noeud dans un TreeView
    Par PM_calou dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/10/2006, 17h42
  4. [VB]Déplacer un noeud dans un TreeView
    Par jacma dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 28/11/2005, 18h27
  5. Pbs pour Glisser-Deplacer des noeuds dans un TreeView.
    Par psau dans le forum C++Builder
    Réponses: 3
    Dernier message: 08/09/2004, 21h02

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