Bonjour,
Voila j'essaye de de faire un treeview qui déploie le "Disque local (C) avec le contenu des dossiers et sous dossiers.
Je suis débutant et j'ai trouvé un script sur des forum (peut être ici d'ailleurs) qui affiche une arborescence et qui liste dans une listview le contenu du dossier sélectionné, exactement ce que je cherche même si je ne comprends pas tout le code.
Problème il n'affiche pas le C:\
Voici le code:
Imports System.IO Public Class Form1
Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged
End Sub
Private Sub PopulateTreeView() Dim rootNode As TreeNode
Dim info As New DirectoryInfo("../..")
If info.Exists Then
rootNode = New TreeNode(info.Name) rootNode.Tag = info GetDirectories(info.GetDirectories(), rootNode) TreeView1.Nodes.Add(rootNode) End If
End Sub
Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)
Dim aNode As TreeNode Dim subSubDirs() As DirectoryInfo Dim subDir As DirectoryInfo For Each subDir In subDirs aNode = New TreeNode(subDir.Name, 0, 0) aNode.Tag = subDir aNode.ImageKey = "folder" subSubDirs = subDir.GetDirectories() If subSubDirs.Length <> 0 Then GetDirectories(subSubDirs, aNode) End If nodeToAddTo.Nodes.Add(aNode) Next subDir
End Sub
Public Sub New() InitializeComponent() PopulateTreeView()
End Sub 'New
Private Sub treeView1_NodeMouseClick(ByVal sender As Object, ByVal e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
Dim newSelected As TreeNode = e.Node ListView1.Items.Clear() Dim nodeDirInfo As DirectoryInfo = CType(newSelected.Tag, DirectoryInfo) Dim subItems() As ListViewItem.ListViewSubItem Dim item As ListViewItem = Nothing
Dim dir As DirectoryInfo For Each dir In nodeDirInfo.GetDirectories() item = New ListViewItem(dir.Name, 0) subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "Directory"), New ListViewItem.ListViewSubItem(item, _ dir.LastAccessTime.ToShortDateString())}
item.SubItems.AddRange(subItems) ListView1.Items.Add(item) Next dir Dim file As FileInfo For Each file In nodeDirInfo.GetFiles() item = New ListViewItem(file.Name, 1) subItems = New ListViewItem.ListViewSubItem() {New ListViewItem.ListViewSubItem(item, "File"), New ListViewItem.ListViewSubItem(item, _ file.LastAccessTime.ToShortDateString())}
item.SubItems.AddRange(subItems) ListView1.Items.Add(item) Next file
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub End Class
Le code tel quel affiche l'arborescence du programme courant, c'est à dire du WindowsApplication1.
J'ai essayé de remplacé dans le code (../..) par (C:\) mais il me met le message d'erreur suivant:
Depuis mon PC maison:
"Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : L'accès au chemin d'accès 'C:\$Recycle.Bin\S-1-5-20' est refusé."
Depuis mon PC Professionnel
Une erreur s'est produite lors de la création du formulaire. Pour plus d'informations, consultez Exception.InnerException. L'erreur est : L'accès au chemin d'accès 'C:\Document and setting' est refusé. (alors que je suis sous W7 et administrateur de mon poste).
En remplaçant "../.." par "../../../.." ça me met le desktop mais avec seulement mes dossiers et fichiers et pas mes raccourci comme "ordinateur" qui correspond au "c:\".
cs_Le Pivert
Messages postés7899Date d'inscriptionjeudi 13 septembre 2007StatutContributeurDernière intervention21 septembre 2023137 8 avril 2014 à 14:50
Bonjour,
Tu peux toujours voir l'arborescence de tes images:
Dim info As New DirectoryInfo("C:\Users\Utilisateur\Pictures")
Ensuite tu mets ceci pour la listview:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ListView1.CheckBoxes = True ListView1.View = View.List End Sub
Si tu veux voir les images c'est autre chose. Il faut un code plus complet
Merci pour ta proposition mais seul le treeview du C m'intéresse.
Pour info on vient de me donner l'astuce (source msdn.microsoft)
en utilisant le try catch...
La partie de mon code corrigé:
Private Sub GetDirectories(ByVal subDirs() As DirectoryInfo, ByVal nodeToAddTo As TreeNode)
Dim aNode As TreeNode Dim subSubDirs() As DirectoryInfo Dim subDir As DirectoryInfo For Each subDir In subDirs aNode = New TreeNode(subDir.Name, 0, 0) aNode.Tag = subDir aNode.ImageKey = "folder" Try subSubDirs = subDir.GetDirectories() Catch e As UnauthorizedAccessException subSubDirs = Nothing End Try If Not subSubDirs Is Nothing Then If subSubDirs.Length <> 0 Then GetDirectories(subSubDirs, aNode) End If End If nodeToAddTo.Nodes.Add(aNode) Next subDir