Procedura dettagliata: creazione di un'interfaccia di tipo Esplora risorse con i controlli ListView e TreeView utilizzando la finestra di progettazione
Aggiornamento: novembre 2007
Uno dei vantaggi di Visual Studio 2005 consiste nella capacità di creare rapidamente applicazioni Windows Form a livello professionale. Uno scenario comune consiste nella creazione di un'interfaccia utente (UI, User Interface) con i controlli ListView e TreeView simile alla funzionalità Esplora risorse dei sistemi operativi Windows. Esplora risorse consente di visualizzare la struttura gerarchica dei file e delle cartelle di un computer.
Nota: |
---|
È possibile che le finestre di dialogo e i comandi di menu visualizzati varino da quelli descritti nella Guida in linea a seconda delle impostazioni attive o dell'edizione del programma Per modificare le impostazioni, scegliere Importa/esporta impostazioni dal menu Strumenti. Per ulteriori informazioni, vedere Impostazioni di Visual Studio. |
Per creare il form contenente i controlli ListView e TreeView
Scegliere Nuovo dal menu File, quindi Progetto.
Nella finestra di dialogo Nuovo progetto attenersi alla seguente procedura:
Nel riquadro Tipi progetto scegliere Progetti di Visual Basic o Progetti di Visual C#.
Nel riquadro Modelli selezionare Applicazione Windows.
Scegliere OK. Verrà creato un nuovo progetto Windows Form.
Aggiungere un controllo SplitContainer nel form e impostare la proprietà Dock su Fill.
Aggiungere un ImageList denominato imageList1 nel form e utilizzare il Visualizzatore proprietà per aggiungere le immagini di una cartella e di un documento in tale ordine.
Aggiungere un controllo TreeView denominato treeview1 nel form e posizionarlo sul lato sinistro del controllo SplitContainer. Nel Visualizzatore proprietà per treeView1, procedere nel modo seguente:
Aggiungere un controllo ListView denominato listView1 nel form e posizionarlo sul lato destro del controllo SplitContainer. Nel Visualizzatore proprietà per listview1, procedere nel modo seguente:
Aprire l'editor dell'insieme ColumnHeader facendo clic sul pulsante con i puntini di sospensione () nella proprietà Columns. Aggiungere tre colonne e impostare la proprietà Text su Name, Type e Last Modified, rispettivamente. Scegliere OK per chiudere la finestra di dialogo.
Impostare la proprietà SmallImageList su imageList1..
Implementare il codice per inserire i nodi principali e secondari in TreeView. Il codice di esempio legge dal file system e richiede l'esistenza di due icone, folder.ico e doc.ico, aggiunte in precedenza a imageList1.
Private Sub PopulateTreeView() Dim rootNode As TreeNode Dim info As New DirectoryInfo("C:\Documents and Settings") 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
private void PopulateTreeView() { TreeNode rootNode; DirectoryInfo info = new DirectoryInfo(@"C:\Documents and Settings"); 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); } }
Poiché nel codice precedente viene utilizzato lo spazio dei nomi System.IO, aggiungere l'istruzione using o import appropriata nella parte superiore del form.
Imports System.IO
using System.IO;
Chiamare il metodo di configurazione del passaggio precedente nel costruttore del form o il metodo per la gestione dell'evento Load.
Public Sub New() InitializeComponent() PopulateTreeView() End Sub 'New
public Form1() { InitializeComponent(); PopulateTreeView(); }
Gestire l'evento NodeMouseClick per treeview1e implementare il codice per inserire inlistview1il contenuto di un nodo allorché viene selezionato.
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
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); }
Se si utilizza C#, assicurarsi che l'evento NodeMouseClick sia associato al relativo metodo di gestione degli eventi.
this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
Test dell'applicazione
È ora possibile verificare il form per assicurarsi che funzioni correttamente.
Per eseguire il test del form
Premere F5 per eseguire l'applicazione.
Verrà visualizzato un form suddiviso contenente un controllo TreeView che visualizza la directory c:\Documents and Settings nel lato sinistro e un controllo ListView nel lato destro con tre colonne. È possibile scorrere TreeView selezionando i nodi di directory. InListView viene inserito il contenuto della directory selezionata.
Passaggi successivi
L'applicazione fornisce un esempio di come si possono utilizzare insieme i controlli TreeView e ListView. Per ulteriori informazioni sui 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
Vedere anche
Attività
Procedura: aggiungere e rimuovere nodi tramite il controllo TreeView di Windows Form
Procedura: aggiungere e rimuovere elementi tramite il controllo ListView di Windows Form
Procedura: aggiungere colonne al controllo ListView di Windows Form