Procedura dettagliata: Creazione di un'interfaccia stile Esplora risorse con i controlli ListView e TreeView utilizzando il Designer
Uno dei vantaggi di Visual Studio è la possibilità di creare applicazioni Windows Form dall'aspetto professionale in un breve periodo di tempo. Uno scenario comune è la creazione di un'interfaccia utente (UI) con controlli ListView e TreeView che si avvicinano alla funzionalità di Esplora Risorse dei sistemi operativi Windows. Esplora Risorse visualizza una struttura gerarchica dei file e delle cartelle nel computer di un utente.
Per creare il modulo contenente un controllo ListView e TreeView
Nel menu File
scegliere Nuovo e quindi fare clic suProgetto .Nella finestra di dialogo Nuovo progetto eseguire le operazioni seguenti:
Nelle categorie scegliere Visual Basic o Visual C#.
Nell'elenco dei modelli, scegliere applicazione Windows Forms.
Fare clic su OK. Viene creato un nuovo progetto Windows Form.
Aggiungere un controllo SplitContainer al modulo e impostarne la proprietà Dock su Fill.
Aggiungere un ImageList denominato
imageList1
al modulo e usare la finestra Proprietà per aggiungere due immagini: un'immagine di cartella e un'immagine del documento, in tale ordine.Aggiungere un controllo TreeView denominato
treeview1
al form e posizionarlo sul lato sinistro del controllo SplitContainer. Nella finestra Proprietà pertreeView1
eseguire le operazioni seguenti:Aggiungere un controllo ListView denominato
listView1
al form e posizionarlo sul lato destro del controllo SplitContainer. Nella finestra Proprietà perlistview1
eseguire le operazioni seguenti:Aprire l'Editor raccolta ColumnHeader facendo clic sui puntini di sospensione () nella proprietà Columns**.** Aggiungere tre colonne e impostare rispettivamente la proprietà Text su
Name
,Type
eLast Modified
. Fare clic su OK per chiudere la finestra di dialogo.Impostare la proprietà SmallImageList su
imageList1.
Implementare il codice per popolare il TreeView con nodi e sottonodi. Aggiungere questo codice alla classe
Form1
.private void PopulateTreeView() { TreeNode rootNode; DirectoryInfo info = new DirectoryInfo(@"../.."); if (info.Exists) { rootNode = new TreeNode(info.Name); rootNode.Tag = info; GetDirectories(info.GetDirectories(), rootNode); treeView1.Nodes.Add(rootNode); } } private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo) { TreeNode aNode; DirectoryInfo[] subSubDirs; foreach (DirectoryInfo subDir in subDirs) { aNode = new TreeNode(subDir.Name, 0, 0); aNode.Tag = subDir; aNode.ImageKey = "folder"; subSubDirs = subDir.GetDirectories(); if (subSubDirs.Length != 0) { GetDirectories(subSubDirs, aNode); } nodeToAddTo.Nodes.Add(aNode); } }
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
Poiché il codice precedente utilizza lo spazio dei nomi System.IO, aggiungere l'istruzione using o import appropriata nella parte superiore del modulo.
using System.IO;
Imports System.IO
Chiamare il metodo di configurazione del passaggio precedente nel costruttore del modulo o nel metodo di gestione degli eventi Load. Aggiungere questo codice al costruttore del modulo.
public Form1() { InitializeComponent(); PopulateTreeView(); }
Public Sub New() InitializeComponent() PopulateTreeView() End Sub
Gestire l'evento NodeMouseClick per
treeview1
, e implementare il codice per popolarelistview1
con il contenuto di un nodo quando si fa clic su un nodo. Aggiungere questo codice alla classeForm1
.void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { TreeNode newSelected = e.Node; listView1.Items.Clear(); DirectoryInfo nodeDirInfo = (DirectoryInfo)newSelected.Tag; ListViewItem.ListViewSubItem[] subItems; ListViewItem item = null; foreach (DirectoryInfo 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); } foreach (FileInfo 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); } listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize); }
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 listView1.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize) End Sub
Se si usa C#, assicurarsi di avere l'evento NodeMouseClick associato al relativo metodo di gestione degli eventi. Aggiungi questo codice al costruttore del modulo.
this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
Test dell'applicazione
È ora possibile testare il modulo per assicurarsi che si comporti come previsto.
Per testare il modulo
Premere F5 per eseguire l'applicazione.
Verrà visualizzata una maschera suddivisa in cui sul lato sinistro apparirà il controllo TreeView che mostra la directory del progetto, mentre sul lato destro ci sarà il controllo ListView con tre colonne. È possibile attraversare il TreeView selezionando i nodi della directory e il ListView viene popolato con il contenuto della directory selezionata.
Passaggi successivi
Questa applicazione offre un esempio di modo in cui è possibile usare TreeView e ListView controlli insieme. Per altre informazioni su questi controlli, vedere gli argomenti seguenti:
Procedura: Aggiungere informazioni personalizzate a un controllo TreeView o ListView (Windows Form)
Procedura: Aggiungere funzionalità di ricerca a un controllo ListView
Vedere anche
.NET Desktop feedback