Torna al Thread
'L'elemento dummy per mostrare il +
Dim dummy As New TreeNode()
'Le estensioni delle icone dei file già caricati
'(per evitare di ricaricare la stessa icona)
Dim loadedExtensions As New List(Of String)
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Crea un'ImageList che contiene le icone dei file
Dim imgList As New ImageList
imgList.ImageSize = New Size(32, 32)
imgList.ColorDepth = ColorDepth.Depth32Bit
'Associa l'ImageList sia per le icone piccole
'che per quelle grandi
ListView1.SmallImageList = imgList
ListView1.LargeImageList = imgList
'Imposta il Tag della dummy su "dummy"
dummy.Tag = "dummy"
'Crea i nodi base della TreeView
Dim drivers As String() = Directory.GetLogicalDrives()
'Aggiunge ogni percorso base
Dim Cartelle As String
For Each Cartelle In drivers
Dim added As TreeNode = TreeView1.Nodes.Add(Cartelle)
added.Tag = Cartelle
'Aggiunge anche il sottonodo dummy
added.Nodes.Add(dummy.Clone())
Next
End Sub
Private Sub TreeView1_AfterExpand(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles TreeView1.AfterExpand
TreeView1.BeginUpdate()
Try
'ottiene le sottodirectory del nodo
Dim dirs As String() = Directory.GetDirectories(e.Node.Tag)
'Se il nodo non è popolato o vi è stato
'precedentemente un errore ripopola i sottonodi
If e.Node.Nodes.Count = 1 AndAlso _
(e.Node.Nodes(0).Tag = "dummy" OrElse _
e.Node.Nodes(0).Tag = "errore") Then
'Rimuove il nodo dummy (o quello dell'errore)
e.Node.Nodes.RemoveAt(0)
'Cicla fra le sottodirectory
For Each dir As String In dirs
'Come testo imposta solo il nome della cartella
Dim added As TreeNode = e.Node.Nodes.Add(Path.GetFileName(dir))
'Come tag imposta il percorso completo
added.Tag = dir
'Aggiuge il nodo dummy
added.Nodes.Add(dummy.Clone)
Next
End If
Catch ex As Exception
'Pulisce tutti i sottonodi
e.Node.Nodes.Clear()
'Aggiune un nodo di errore (Tag "errore")
e.Node.Nodes.Add(ex.Message).Tag = "errore"
End Try
TreeView1.EndUpdate()
End Sub
Sub Vadoconfile(ByVal DammiDir As String)
Try
'Pulisce gli elementi della ListView
ListView1.Items.Clear()
' Leggo il file
Dim myDir As DirectoryInfo = New DirectoryInfo(DammiDir)
'Il file della directory
Dim file As FileInfo
'L'oggetto che viene aggiunto
Dim li As ListViewItem
For Each file In myDir.GetFiles
'Aggiunge come testo il nome del file
li = ListView1.Items.Add(file.Name)
'Ottiene l'estensione del file
Dim ext As String = Path.GetExtension(file.Name)
'Se l'icona per il file non è ancora stata caricata lo fa:
If Not loadedExtensions.Contains(ext) Then
'Estrae l'icona associata al file
Dim icn As Icon = Icon.ExtractAssociatedIcon(file.FullName)
'Aggiunge l'icona all'elenco dell'ImageList
li.ImageList.Images.Add(ext, icn)
'Aggiunge l'estensione all'elenco di quelle caricate
loadedExtensions.Add(ext)
End If
'Imposta l'icona da visualizzare
li.ImageKey = ext
Next
Catch ex As Exception
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Ottiene i file dal percorso completo
'(che avevamo salvato nel Tag del nodo)
Vadoconfile(TreeView1.SelectedNode.Tag)
End Sub