sabato 23 giugno 2007

ListView e TreeView insieme per elenco cartelle e files


Ho fatto una revisione del mio precedente esempio sull'argomento:
ListView su files e directories con corrispondenti icone con VB.NET


Come si vede dall'immagine si tratta di una pallida, lontana e indegna imitazione di Explorer.

Si parte estraendo delle periferiche di archiviazione presenti utilizzando la gerarchia System.Management

SelectQuery query = new SelectQuery("SELECT * FROM Win32_LogicalDisk");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))

Si aggiungono i nodi appartenenti alla gerarchia di cartelle:




int AggiungiNodo(TreeNode nodoPadre)
{
string cartella = nodoPadre.FullPath;
if (! cartella.EndsWith("\\"))
cartella
+= "\\";
foreach (string s in Directory.GetDirectories(cartella))
{
TreeNode nodo
= new TreeNode();
nodo.Text
= new DirectoryInfo(s).Name;
nodo.ImageIndex
= 0;
nodo.SelectedImageIndex
= 1;
nodoPadre.Nodes.Add(nodo);
}
}


Sull'evento AfterSelect prendiamo un altro livello



private void foldersTreeView_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node.Nodes.Count == 0)
{
AggiungiNodo(e.Node);
}
GeneraListView(e.Node.FullPath);

}


Si recupera l'icona tramite la classe helper:



[DllImport("shell32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SHGetFileInfo(string pszPath, int dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, int uFlags);

Riferimenti:


Esempio realizzato con VB.NET
Esempio realizzato con C#

Nessun commento: