Procedura dettagliata: Creazione di un'interfaccia di tipo Esplora risorse con i controlli ListView e TreeView utilizzando la finestra di progettazione
Uno dei vantaggi di Visual Studio è la possibilità di creare applicazioni di Windows Form dall'aspetto professionale in un breve periodo di tempo. Uno scenario comune è la creazione di un'interfaccia utente con ListView controlli e TreeView simili alla funzionalità 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
Scegliere Nuovo dal menu Filee quindi fare clic su Progetto.
Nella finestra di dialogo New Project (Nuovo progetto) seguire questa procedura:
Nelle categorie scegliere Visual Basic o Visual C#.
Nell'elenco dei modelli scegliere Windows Form'applicazione.
Fare clic su OK. Viene creato un nuovo progetto Windows Form.
Aggiungere un SplitContainer controllo al form e impostarne la Dock proprietà su Fill.
Aggiungere un ImageList oggetto denominato
imageList1
al modulo e usare il Finestra Proprietà per aggiungere due immagini: un'immagine di cartella e un'immagine del documento, in tale ordine.Aggiungere un TreeView controllo denominato
treeview1
al form e posizionarlo sul lato sinistro del SplitContainer controllo. Nel Finestra Proprietà pertreeView1
eseguire le operazioni seguenti:Aggiungere un ListView controllo denominato
listView1
al form e posizionarlo sul lato destro del SplitContainer controllo. Nel Finestra Proprietà perlistview1
eseguire le operazioni seguenti:Aprire l'Editor raccolta ColumnHeader facendo clic sui puntini di sospensione () nella Columns proprietà**.** Aggiungere tre colonne e impostarne Text la proprietà rispettivamente su
Name
,Type
eLast Modified
. Scegliere OK per chiudere la finestra di dialogo.Impostare la proprietà SmallImageList su
imageList1.
Implementare il codice per popolare con TreeView nodi e sottonodi. Aggiungere questo codice alla
Form1
classe .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 usa 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 set-up del passaggio precedente nel costruttore o Load nel metodo di gestione degli eventi del modulo. 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 implementarelistview1
il codice da popolare con il contenuto di un nodo quando si fa clic su un nodo. Aggiungere questo codice allaForm1
classe .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. Aggiungere 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 divisa contenente un TreeView controllo che visualizza la directory del progetto a sinistra e un ListView controllo a destra con tre colonne. È possibile attraversare l'oggetto TreeView selezionando i nodi della directory e l'oggetto 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 i 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
Procedura: Associare un menu di scelta rapida a un nodo di TreeView
Vedi anche
.NET Desktop feedback