Récupérer les Nodes d'1 TreeView dans l'ordre du tri

yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013 - 11 sept. 2004 à 15:24
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013 - 12 sept. 2004 à 10:45
Je cherche à récupérer les Nodes d'1 TV trié dans 1 autre TV.
Avec 1 boucle For I=1 To TVx.Nodes.count, je récupère bien l'ensemble des Nodes mais das l'ordre de leur index, à savoir dans l'ordre où ils ont été crées dans le TV, or je souhaiterais les récupérer triés tels qu'ils apparaissent dans le TV avec la propriété sorted=true.
Si qq'1 sait MERCI d'avance.

7 réponses

NicoSoftt Messages postés 106 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 28 octobre 2005
11 sept. 2004 à 17:37
Salut yan35,

Essai ca

Ca marche que si tes items ont des key
Le treeview d'origine -> tv
Le treeview de destination ->tv2

'tv2.Nodes.Clear

For i = 1 To tv.Nodes.Count
If tv.Nodes(i).Root.Key = tv.Nodes(i).Key Then
tv2.Nodes.Add , , tv.Nodes(i).Key, tv.Nodes(i).Text
Else: tv2.Nodes.Add tv.Nodes(i).Parent.Key, tvwChild, tv.Nodes(i).Key, tv.Nodes(i).Text
End If
Next i

N$
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
11 sept. 2004 à 18:02
Merci de ta réponse, c'est sympa, mais ça ne s'adapte pas à ce que je cherche à faire car je n'ai pas 1 arborescence à partir d'1 root mais 1 ensemble de noeuds non rattables à 1 root mais avec des enfants.
Donc si je retire le test de ton et en utilise seulement la partie "Else" , c'est ce que je faisais avant de poser ma question et ça me marche pas. Je veux dire la récupération Triée dans Tv2.
Je retrouve mes Nodes dans l'ordre aléatoire où ils ont été entrés...
Je crois que je vais devoir passer par 1 tableau intermédiaire que je vais trier, mais je voulais faire + court et + beau !
Merci de ton aide
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 sept. 2004 à 22:35
Essaye ça:

Private Sub PrintRecursive(n As Node)
MsgBox n.Text
On Error GoTo FIN1
PrintRecursive n.Child
PrintRecursive n.Child.Next
FIN1:
On Error GoTo FIN2
PrintRecursive n.Next
FIN2:
End Sub

Call PrintRecursive(TreeView.Nodes(1))
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 sept. 2004 à 00:40
variante:

Private Sub PrintRecursive(n As MSComctlLib.Node)

' c'est ici qu'on édite le noeud
MsgBox n.Text

' test pas nécessaire
' If n Is Nothing Then Exit Sub

' recherche des enfants
If Not n.Child Is Nothing Then
PrintRecursive n.Child
' recherche des enfants suivants
If Not n.Child.Next Is Nothing Then
PrintRecursive n.Child.Next
End If
End If

' plus d'enfants, on revient au noeud suivant
If Not n.Next Is Nothing Then
PrintRecursive n.Next
End If

End Sub

Call PrintRecursive(TreeView.Nodes(1))

Enjoy!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 sept. 2004 à 01:38
En fait il y a des doubles donc je corrige.

Private Sub PrintRecursive(n As MSComctlLib.Node)
' c'est ici qu'on édite le noeud
MsgBox n.Text
' recherche des enfants
If Not n.Child Is Nothing Then
PrintRecursive n.Child
End If
' plus d'enfants, on revient au noeud suivant
If Not n.Next Is Nothing Then
PrintRecursive n.Next
End If
End Sub


Call PrintRecursive(TreeView.Nodes(1))

Daniel
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
12 sept. 2004 à 01:49
Sinon il y a plus simple en non récursif.

Private Sub PrintNodes ()
    Dim Nodx As Node
    For Each Nodx In TV.Nodes
 '        c'est ici qu'on édite le noeud
          MsgBox Nodx.Text
          Next
End Sub


La seule chose que j'ai dite, c'est que je n'ai jamais dit ce qu'on a dit que j'aurais dit. Rien ne peut donc autoriser quiconque de bonne foi à dire que j'ai dit ce que je n'ai pas dit, d'autant plus que je redis que ceux qui continuent à dire ce que j'aurais dit,
n'étaient pas présents au moment et à l'endroit où j'aurais dit ce que je n'ai pas dit.
0
yan35 Messages postés 185 Date d'inscription dimanche 29 juin 2003 Statut Membre Dernière intervention 20 juin 2013
12 sept. 2004 à 10:45
Merci Daniel de tes Post.
Je viens d'essayer ta dernière proc qui paraît Super simple avec 1 boucle For each, mais ça ne marche pas.
Je veux dire biensûr que je n'obtiens pas les nodes triés dans l'ordre de la TV, mais dans l'ordre où ils ont été créés dans la TV. Ce qui doit être logique puisque each appelle chaque item de la collection.
Item qui représente 1 node, lequel est identifié dans la collection par son index ( enfin, je crois !). On retrouve donc à l'arrivée des Nodes classés dans l'ordre de leur index.

Entre les 2, j'ai résolu mon problème en transférant tous les nodes de la TV dans 1 tableau intermédaire donc dans l'ordre où ils viennent, puis après je fais 1 tri à bulles du tableau.
Ca me fait 1 lecture de + que si j'avais pu directement récupérer les nodes triés par la TV en alpha, mais c'est quasiment invisible en temps pour l'utilisateur ....

Enfin si qqu'un sait comment récupérer les Nodes triés comme dans la TV, je suis toujours preneur pour savoir !
8-)
@ +
0
Rejoignez-nous