OVH Cloud OVH Cloud

Treeview : parcours des nodes root

5 réponses
Avatar
Nicolas
Bonjour,

J'utilise un treeview pour afficher une liste de personnes par catégories.
Voici un exemple d'arborescence :
-Professionnel
|--Nicolas
|--Stéphane
-Personnel
|--Nicolas
|--Nicolas
|--Nicolas

Il peut y avoir plusieurs catégories. Est-il possible de ne parcourir que
les catégories?
En fait, si j'ai bien compris chaque racine (catégorie) est un objet node
comme les autres donc il n'est pas possible de connaitre avant execution les
index des catégories qui vont être affichés du fait que cela dépends du
nombre de node qu'il y aura entre les catégories.

Quelqu'un connait-il un tutoriel avancé pour le treeview.

Merci d'avance pour votre aide.

Nicolas.

5 réponses

Avatar
ng
Salut,

Essaye qqch chose comme ceci :

Dim i As Integer
For i = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(i).Parent Is Nothing Then
Debug.Print "Root : " & i
End If
Next

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Nicolas a écrit :

Bonjour,

J'utilise un treeview pour afficher une liste de personnes par
catégories. Voici un exemple d'arborescence :
-Professionnel
|--Nicolas
|--Stéphane
-Personnel
|--Nicolas
|--Nicolas
|--Nicolas

Il peut y avoir plusieurs catégories. Est-il possible de ne parcourir
que les catégories?
En fait, si j'ai bien compris chaque racine (catégorie) est un objet
node comme les autres donc il n'est pas possible de connaitre avant
execution les index des catégories qui vont être affichés du fait que
cela dépends du nombre de node qu'il y aura entre les catégories.

Quelqu'un connait-il un tutoriel avancé pour le treeview.

Merci d'avance pour votre aide.

Nicolas.


Avatar
Zoury
Salut Nicolas! :O)

For i = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(i).Parent Is Nothing Then



Il y a une méthode plus efficace.. Présentement, tu boucles sur tous les
noeuds de l'arbre tandis qu'en utilisant la propriété Next tu pourrais
boucler sur les noeuds Root seulement..

Ex (non testé) :
'***
Dim nd As Node

If (TreeView1.Nodes.Count > 0) Then
' on va chercher le premier noeud root de l'arbre
Set nd = TreeView1.Nodes(0).Root.FirstSibling
Do until nd Is Nothing
Debug.Print nd.Text
Set nd = nd.Next ' on passe au suivant (même niveau)
Loop
End If
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/
Avatar
Laurent Jordi \(www.ezlogic.mc\)
Salut,

Je suis tout a fait d'accord avec zoury, le parcours de toutes les nodes
d'un treeview est très lent. Si l'abre est grand ça va super ramer... Il est
donc necessaire d'utiliser les nextsibling...

@+

LJ


"Zoury" a écrit dans le message de
news:
Salut Nicolas! :O)

> For i = 1 To TreeView1.Nodes.Count
> If TreeView1.Nodes(i).Parent Is Nothing Then

Il y a une méthode plus efficace.. Présentement, tu boucles sur tous les
noeuds de l'arbre tandis qu'en utilisant la propriété Next tu pourrais
boucler sur les noeuds Root seulement..

Ex (non testé) :
'***
Dim nd As Node

If (TreeView1.Nodes.Count > 0) Then
' on va chercher le premier noeud root de l'arbre
Set nd = TreeView1.Nodes(0).Root.FirstSibling
Do until nd Is Nothing
Debug.Print nd.Text
Set nd = nd.Next ' on passe au suivant (même niveau)
Loop
End If
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/




Avatar
Nicolas
Bonjour,

Merci beaucoup pour se code, il fonctionne super bien, de plus c'est
optimisé, les utilisateurs de mon logiciel apprécieront ;).

Cordialement.
Nicolas COLLET.

"Zoury" a écrit dans le message de
news:
Salut Nicolas! :O)

> For i = 1 To TreeView1.Nodes.Count
> If TreeView1.Nodes(i).Parent Is Nothing Then

Il y a une méthode plus efficace.. Présentement, tu boucles sur tous les
noeuds de l'arbre tandis qu'en utilisant la propriété Next tu pourrais
boucler sur les noeuds Root seulement..

Ex (non testé) :
'***
Dim nd As Node

If (TreeView1.Nodes.Count > 0) Then
' on va chercher le premier noeud root de l'arbre
Set nd = TreeView1.Nodes(0).Root.FirstSibling
Do until nd Is Nothing
Debug.Print nd.Text
Set nd = nd.Next ' on passe au suivant (même niveau)
Loop
End If
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/




Avatar
ng
Ok au temps pr moi ! Mais je n'avais jamais eu a refléchir a ce problème
n'utilisant généralement que très peu de nodes dans mes treeviews.

--
Nicolas G.
FAQ VB : http://faq.vb.free.fr
API Guide : http://www.allapi.net
Google Groups : http://groups.google.fr/
MZ-Tools : http://www.mztools.com/
http://apisvb.europe.webmatrixhosting.net/



Laurent Jordi (www.ezlogic.mc) <inf[o]@ezlogic.mc> a écrit :

Salut,

Je suis tout a fait d'accord avec zoury, le parcours de toutes les
nodes d'un treeview est très lent. Si l'abre est grand ça va super
ramer... Il est donc necessaire d'utiliser les nextsibling...

@+

LJ


"Zoury" a écrit dans le message de
news:
Salut Nicolas! :O)

For i = 1 To TreeView1.Nodes.Count
If TreeView1.Nodes(i).Parent Is Nothing Then



Il y a une méthode plus efficace.. Présentement, tu boucles sur tous
les noeuds de l'arbre tandis qu'en utilisant la propriété Next tu
pourrais boucler sur les noeuds Root seulement..

Ex (non testé) :
'***
Dim nd As Node

If (TreeView1.Nodes.Count > 0) Then
' on va chercher le premier noeud root de l'arbre
Set nd = TreeView1.Nodes(0).Root.FirstSibling
Do until nd Is Nothing
Debug.Print nd.Text
Set nd = nd.Next ' on passe au suivant (même niveau)
Loop
End If
'***

--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
Le français se refait une beauté, parlons en :
http://www.orthographe-recommandee.info/