COPIE DE TREEVIEW

cs_Mercury Messages postés 329 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 octobre 2005 - 17 mai 2002 à 13:59
rebixav Messages postés 130 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 28 janvier 2013 - 14 sept. 2012 à 00:37
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/3341-copie-de-treeview

rebixav Messages postés 130 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 28 janvier 2013
14 sept. 2012 à 00:37
moi j'ai essayer cela cela marche très bien et bien plus rapide(il n'y a pas le IF ! ! !), et je vous laisse un petit cadeau en plus :)

Public Sub TreeView_to_TreeView(ByRef source As TreeView, ByRef Destination As TreeView)

Dim i As Integer
Destination.ImageList = source.ImageList
Destination.Nodes.Add , , source.Nodes(1).key, source.Nodes(1).Text, source.Nodes(1).Image, source.Nodes(1).SelectedImage
For i = 2 To source.Nodes.Count
Destination.Nodes.Add source.Nodes(i).Parent.key, tvwChild, source.Nodes(i).key, source.Nodes(i).Text, source.Nodes(i).Image, source.Nodes(i).SelectedImage
Next i

End Sub

Public Enum treeview_open_
Le_1er_niveau = 1
Les_DIX_1er_niveau = 10
Tous_niveau = 100
End Enum
Public Sub treeview_open(la_TreeView As TreeView, Optional ByVal nb_A_ouvrir As treeview_open_ = 1)
Dim i%
Select Case nb_A_ouvrir
Case 1: la_TreeView.Nodes(1).Expanded = True
Case 10
For i% = 1 To 10
la_TreeView.Nodes(i%).Expanded = True
Next i%
Case 100
For i% = 1 To la_TreeView.Nodes.Count
la_TreeView.Nodes(i%).Expanded = True
Next i%
End Select
End Sub
Ammoniak Messages postés 37 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 26 juillet 2007
22 janv. 2006 à 08:24
Désolé, je me suis trompé. Voici la bonne solution (à mon avis).
Celle-ci prend en charge plusieurs noeuds racines.
Une autre remarque sur ton code: tu as fais une "Function" qui ne renvoit rien, il faut la transformer en une "Sub".


Public Sub Copier(ByRef Source As TreeView, ByRef Destination As TreeView)
Dim i As Integer

Destination.ImageList = Source.ImageList
For i = 1 To Source.Nodes.Count
If Source.Nodes(i).Parent Is Nothing Then
Destination.Nodes.Add , , Source.Nodes(i).Key, Source.Nodes(i).Text, Source.Nodes(i).Image, Source.Nodes(i).SelectedImage
Else
Destination.Nodes.Add Source.Nodes(i).Parent.Key, tvwChild, Source.Nodes(i).Key, Source.Nodes(i).Text, Source.Nodes(i).Image, Source.Nodes(i).SelectedImage
End If
Next i
End Sub
Ammoniak Messages postés 37 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 26 juillet 2007
22 janv. 2006 à 08:14
Je te propose une version un peu épurée de ton code (seul ma quatrième remarque n'est pas corrigée -> à toi de voir ;)
J'ajoute que la déclaration de ta chaine était aussi abusive (elle représente un objet auquel on peut accéder facilement)
De plus, il est plus commun de donner la source avant la destination lors d'une copie

Voilà ma proposition:
Public Function Copier(ByRef Source As TreeView, ByRef Destination As TreeView) As TreeView
Dim i As Integer
Dim tmpNode As Node

Destination.ImageList = Source.ImageList
For i = 1 To Source.Nodes.Count
If (i = 1) Then
Set tmpNode = Destination.Nodes.Add(, , Source.Nodes(i).Key, Source.Nodes(i).Text, Source.Nodes(i).Image, Source.Nodes(i).SelectedImage)
Set tmpNode = Source.Nodes(i)
Else
Set tmpNode = Destination.Nodes.Add(Source.Nodes(i).Parent.Key, tvwChild, Source.Nodes(i).Key, Source.Nodes(i).Text, Source.Nodes(i).Image, Source.Nodes(i).SelectedImage)
Set tmpNode = Source.Nodes(i)
End If
Next i
End Function
Ammoniak Messages postés 37 Date d'inscription vendredi 1 février 2002 Statut Membre Dernière intervention 26 juillet 2007
22 janv. 2006 à 08:06
4/10 parce que le principe est à peu près correct, mais:
- code non portable à cause de "chaine = groupe.TreeView1.Nodes(i).Parent.Key" (si on met deux TreeViews appelés T1 et T2, TreeView1 devient un identificateur inconnu -> erreur)
- déclaration d'un objet pas nécessaire dans ton code: "Dim Node_L As Node"
- manipulation de cet objet sans raison (tu lui affecte une valeur que tu n'utilise pas)
- ce code ne marche que pour un arbre simple avec un seul noeud racine
cs_NoFutur Messages postés 171 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 6 mai 2007 1
13 févr. 2004 à 18:48
Excellent 10/10, c'est tout ce q'il me fallait :o)
cs_Mercury Messages postés 329 Date d'inscription jeudi 3 janvier 2002 Statut Membre Dernière intervention 7 octobre 2005
17 mai 2002 à 13:59
Il ne manque plus qu'une fonction d'export du contenu du Treeview vers un fichier texte, et c'est parfait ;-) 8/10
Rejoignez-nous