Torna al Thread

'L'elemento dummy per mostrare il + Dim dummy As New TreeNode() 'Le icone già caricate Dim loadedIcons As New Dictionary(Of String, IntPtr) <DllImport("shell32.dll")> _ Shared Function ExtractAssociatedIcon( _ ByVal hInstance As IntPtr, _ ByVal lpIconPath As String, _ ByRef lpiIcon As Integer) As IntPtr End Function <DllImport("user32.dll")> _ Shared Function DestroyIcon(ByVal hIcon As IntPtr) As Boolean End Function 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 loadedIcons.ContainsKey(ext) Then 'Estrae l'icona associata al file Dim iconHandle As IntPtr = _ ExtractAssociatedIcon(IntPtr.Zero, file.FullName, 0) Dim img As Image = Icon.FromHandle(iconHandle).ToBitmap() 'Aggiunge l'icona all'elenco dell'ImageList li.ImageList.Images.Add(ext, img) 'Aggiunge l'estensione all'elenco di quelle caricate loadedIcons.Add(ext, iconHandle) End If 'Imposta l'icona da visualizzare li.ImageIndex = li.ImageList.Images.IndexOfKey(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 'Prima di chiudere la finestra chiama questo metodo che 'rilasia le risorse usate dalle Icon caricate Sub Clean() 'Distrugge l'handle di sistema di ogni icona For Each hIcon As IntPtr In loadedIcons.Values DestroyIcon(hIcon) Next 'Pulisce l'elenco delle icone caricate loadedIcons.Clear() End Sub
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5