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

Windows Forms Discussion :

[VB.NET] Trouver noeud dans un TreeView


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Points : 71
    Points
    71
    Par défaut [VB.NET] Trouver noeud dans un TreeView
    Bonjour

    J'ai un treeview dans lequel j'ai des noeux nommés
    NodRoot
    |
    | NodToto
    | |
    | | NodTotoBob
    |
    | NodTiti
    | |
    | | NodTitiBob
    |
    | NodTata
    Etc...

    Je voudrai récupérer la valeur du .Tag de NodTitiBob (qui est un string) par exemple

    J'ai essayé pas mal de trucs sans résultat et je n'ai pas trouvé non plus dans la FAQ

    Qui peut m'aider?

    Merci d'avance

    Pascal

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Points : 71
    Points
    71
    Par défaut Pas vraiment ça
    En fait, je veux accéder directement aux infos d'un noeud connu, sans balayer toute l'arboressance et sans avoir à sélectionner le noeud avec le pointeur.

    La structure de l'arbre est fixe et chaque noeud à un nom (pas de boublon), de cette manière je peux modifier le .tag et le .text en selectionnant le parent avec la souris mais je n'arrive pas à faire le contraire, récupérer les infos par le biais du .name



    Pascal

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    A 1ere vue je vois pas comment on accède directement à un noeud.

    Alternative :
    Dans ta form, tu créés une Collection (ou plutôt une classe basée sur DictionaryBase) et dedans tu y stockes tes TreeNode et quand tu as besoin de récupérer un noeud, tu vas chercher sa référence directement dans ta Dictionary.
    Dans DictionaryBase, c'est la référence à ton noeud qui est stockée (parce que TreeNode est une classe pas une structure), donc pas de soucis, c'est bien ton noeud que tu iras chercher et non pas une copie de celui-ci.

    Dans MSDN DictionaryBase fait référence au C# mais regarde ce lien.

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par PM_calou
    En fait, je veux accéder directement aux infos d'un noeud connu, sans balayer toute l'arboressance et sans avoir à sélectionner le noeud avec le pointeur.

    La structure de l'arbre est fixe et chaque noeud à un nom (pas de boublon), de cette manière je peux modifier le .tag et le .text en selectionnant le parent avec la souris mais je n'arrive pas à faire le contraire, récupérer les infos par le biais du .name
    On appelle ça une indexation. Ca veut dire que tu stocke tous tes noeuds dans une structure de données parallèle à ton TreeView. Je conseille la Hashtable.

    Problème : si ton TreeView change, le code de synchro entre la Hashtable et le TreeView est assez chiant et lourd.

    Je ne comprend pas ce qui te gènes dans le fait d'aller chercher ton noeud dans l'arborescence ? C'est assurémment la meilleure solution à tous points de vue (moins cher en mémoire, équivalent au niveau processeur qu'une indexation et pas de redondance des données). En plus, le code pour le faire est hyper simple (5 lignes ?)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Points : 71
    Points
    71
    Par défaut Ah oui?
    Et bien si tu l'as, je suis preneur

    Je m'y suis sans doute mal pris, mais à force de chercher dans tous les sens, les noeuds ont été transféré de mon Treeview à mon cerveau

    Donc pour les 5 lignes, le les prends




    Pascal

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Bon c'est du code un peu.. compressé

    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
    TreeNode Findnode(string name)
    {
       return FindNodeRec(this.Nodes, name);
    }
    TreeNode FindNodeRec(TreeNodeCollection col, string name)
    {
      TreeNode retour = null;
      // on boucle sur la collection de noeuds
      int i = 0;
      while((i < col.Count)
        // jusqu'à trouver
        && ((null == (retour = (name == col[i].Text) ? col[i] : null))
        || (null == (retour = this.FindNodeRec(col[i].Node))))
      i++;
      return retour;
    }

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Le même en version décompressée

    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
    TreeNode Findnode(string name)
    {
       return FindNodeRec(this.Nodes, name);
    }
    TreeNode FindNodeRec(TreeNodeCollection col, string name)
    {
      TreeNode retour = null;
      // on boucle sur la collection de noeuds
      int i = 0;
      while((i < col.Count)
        // jusqu'à trouver
        && (retour == null))
    {
      // on choppe le noeud
      TreeNode current = null;
      // si c'est celui là
      if(name == current.Text)
        retour = current;
      else // sinon on plonge récursivement
        retour = this.FindNodeRec(current, name);
     
      return retour;
    }

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    164
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 164
    Points : 71
    Points
    71
    Par défaut
    Ca c'est chouette

    Il va falloir que j'essaye de traduire ça en VB.NET mais ça à l'ai intéressant.

    Pas le temps de tester ça ce soir mais demain, je m'y mets



    Pascal

Discussions similaires

  1. Rendre invisible un noeud dans un treeview
    Par atb dans le forum Delphi
    Réponses: 8
    Dernier message: 19/05/2007, 11h21
  2. Rendre invisible un noeud dans un treeview
    Par atb dans le forum Bases de données
    Réponses: 1
    Dernier message: 18/05/2007, 08h55
  3. Sélection d'un noeud dans un treeview
    Par saphir54321 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/04/2007, 10h54
  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, 19h27
  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, 22h02

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