cs_Mercury
Messages postés329Date d'inscriptionjeudi 3 janvier 2002StatutMembreDernière intervention 7 octobre 2005
-
17 mai 2002 à 13:59
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 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.
rebixav
Messages postés130Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention28 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és37Date d'inscriptionvendredi 1 février 2002StatutMembreDernière intervention26 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és37Date d'inscriptionvendredi 1 février 2002StatutMembreDernière intervention26 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és37Date d'inscriptionvendredi 1 février 2002StatutMembreDernière intervention26 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és171Date d'inscriptionmardi 17 décembre 2002StatutMembreDernière intervention 6 mai 20071 13 févr. 2004 à 18:48
Excellent 10/10, c'est tout ce q'il me fallait :o)
cs_Mercury
Messages postés329Date d'inscriptionjeudi 3 janvier 2002StatutMembreDerniè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
14 sept. 2012 à 00:37
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
22 janv. 2006 à 08:24
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
22 janv. 2006 à 08:14
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
22 janv. 2006 à 08:06
- 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
13 févr. 2004 à 18:48
17 mai 2002 à 13:59