2 pièce(s) jointe(s)
Sub récursif - double affichage
Bon vendredi à tous!
J'ai cette sub récursive qui cherche tous les sous-dossiers à partir d'une racine passée en paramètre et affiche tous les sous-dossiers dans un TreeView:
Code:
1 2 3 4 5 6 7 8
| Public Sub LoadSubTree(ByRef noeud As TreeNode, ByVal chemin As String)
For Each dossier In Directory.GetDirectories(chemin)
noeud.Nodes.Add(Replace(dossier, chemin & "\", ""))
Next
For Each tn As TreeNode In noeud.Nodes
LoadSubTree(tn, tn.FullPath)
Next
End Sub |
À l'aide d'un bouton, je lances la routine comme ceci:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| Public Sub LoadNewTree()
Dim FolderBrowserDialog1 As New FolderBrowserDialog
FolderBrowserDialog1.ShowNewFolderButton = False
FolderBrowserDialog1.ShowDialog()
If FolderBrowserDialog1.SelectedPath <> "" Then
'Clear ou Remove donne le même résultat
'Explo_win.TreeView.Nodes.Clear()
Explo_win.TreeView.Nodes.RemoveAt(0)
Explo_win.TreeView.Nodes.Add(FolderBrowserDialog1.SelectedPath)
LoadSubTree(Explo_win.TreeView.Nodes(0), FolderBrowserDialog1.SelectedPath)
Explo_win.TreeView.SelectedNode = Explo_win.TreeView.Nodes(0)
End If
Explo_win.TreeView.ExpandAll()
End Sub |
Le problème est qu'à la fin de l'exécution, mon TreeView contient 2 fois la même racine et tout ses sous-dossiers. J'ai beau faire du "step-by-step" mais je ne comprends pas comment il fait pour afficher une 2e fois la racine. De plus, à la fin de l'exécution, j'ai vérifié le TreeView.Nodes.Count et il est égal à 1. Donc le TreeView ne voit qu'un noeud, mais il y en a 2 d'afficher (voir load.jpg)
J'utilise la même fonction à l'ouverture pour ouvrir le dossier de base, sans problème.
(voir ouverture.jpg)