Exemplarische Vorgehensweise: Erstellen einer Explorer-ähnlichen Schnittstelle mit dem ListView-Steuerelement und dem TreeView-Steuerelement im Designer
Einer der Vorteile von Visual Studio ist die Möglichkeit, professionelle Windows Forms-Anwendungen in kurzer Zeit zu erstellen. Ein häufiges Szenario besteht darin, eine Benutzeroberfläche (UI) mit ListView- und TreeView-Steuerelementen zu erstellen, die dem von Windows-Betriebssystemen bekannten Windows-Explorer ähneln. Windows-Explorer zeigt eine hierarchische Struktur der Dateien und Ordner auf dem Computer der Benutzer*innen an.
So erstellen Sie das Formular mit einem ListView- und TreeView-Steuerelement
Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.
Führen Sie im Dialogfeld Neues Projekt folgende Schritte aus:
Wählen Sie in den Kategorien entweder Visual Basic oder Visual C# aus.
Wählen Sie in der Liste der Vorlagen Windows Forms-Anwendung aus.
Klicken Sie auf OK. Ein neues Windows Forms-Projekt wird erstellt.
Fügen Sie dem Formular ein SplitContainer-Steuerelement hinzu, und legen Sie dessen Dock-Eigenschaft auf Fill fest.
Fügen Sie dem Formular eine ImageList namens
imageList1
hinzu, und verwenden Sie das Eigenschaftenfenster, um zwei Bilder hinzuzufügen: ein Ordnerbild und ein Dokumentbild (in dieser Reihenfolge).Fügen Sie dem Formular ein TreeView-Steuerelement namens
treeview1
hinzu, und positionieren Sie es links vom SplitContainer-Steuerelement. Führen Sie im Eigenschaftenfenster zutreeView1
folgende Schritte aus:Fügen Sie dem Formular ein ListView-Steuerelement namens
listView1
hinzu, und positionieren Sie es rechts vom SplitContainer-Steuerelement. Führen Sie im Eigenschaftenfenster zulistview1
folgende Schritte aus:Öffnen Sie den ColumnHeader-Auflistungs-Editor, indem Sie auf die Schaltfläche mit den Auslassungspunkten (
) in der Columns-Eigenschaft klicken. Fügen Sie drei Spalten hinzu, und legen Sie deren Text-Eigenschaft auf
Name
,Type
bzw.Last Modified
fest. Klicken Sie auf OK , um das Dialogfeld zu schließen.Legen Sie die SmallImageList-Eigenschaft auf
imageList1.
fest.
Implementieren Sie den Code, um die TreeView mit Knoten und Unterknoten aufzufüllen. Fügen Sie diesen Code zur
Form1
-Klasse hinzu.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
Da der vorherige Code den System.IO-Namespace verwendet, fügen Sie oben im Formular die entsprechende using- oder import-Anweisung hinzu.
using System.IO;
Imports System.IO
Rufen Sie die Setupmethode aus dem vorherigen Schritt im Konstruktor oder in der Load-Ereignisbehandlungsmethode des Formulars auf. Fügen Sie diesen Code Formularkonstruktor hinzu.
public Form1() { InitializeComponent(); PopulateTreeView(); }
Public Sub New() InitializeComponent() PopulateTreeView() End Sub
Behandeln Sie das NodeMouseClick-Ereignis für
treeview1
, und implementieren Sie den Code, umlistview1
mit dem Inhalt eines Knotens aufzufüllen, wenn auf einen Knoten geklickt wird. Fügen Sie diesen Code zurForm1
-Klasse hinzu.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
Wenn Sie C# verwenden, stellen Sie sicher, dass das NodeMouseClick-Ereignis der Ereignisbehandlungsmethode zugeordnet ist. Fügen Sie diesen Code Formularkonstruktor hinzu.
this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
Testen der Anwendung
Sie können das Formular jetzt testen, um sicherzustellen, dass das Verhalten wie erwartet ausfällt.
So testen Sie das Formular
Drücken Sie F5, um die Anwendung auszuführen.
Es wird ein geteiltes Formular anzeigt, das auf der linken Seite ein TreeView-Steuerelement mit Ihrem Projektverzeichnis enthält und auf der rechten Seite ein ListView-Steuerelement mit drei Spalten. Sie können die TreeView durchlaufen, indem Sie Verzeichnisknoten auswählen. ListView wird dann immer mit dem Inhalt des ausgewählten Verzeichnisses aufgefüllt.
Nächste Schritte
Diese Anwendung bietet Ihnen ein Beispiel für die gemeinsame Verwendung der Steuerelemente TreeView und ListView. Weitere Informationen zu diesen Steuerelementen finden Sie unter den folgenden Themen:
Vorgehensweise: Hinzufügen von Suchfunktionen zu einem ListView-Steuerelement
Vorgehensweise: Anfügen eines Kontextmenüs an einen Strukturansichtsknoten
Weitere Informationen
- ListView
- TreeView
- ListView-Steuerelement
- Vorgehensweise: Hinzufügen oder Entfernen von Knoten mit dem TreeView-Steuerelement in Windows Forms
- Vorgehensweise: Hinzufügen und Entfernen von Elementen mit dem ListView-Steuerelement in Windows Forms
- Vorgehensweise: Hinzufügen von Spalten zum ListView-Steuerelement in Windows Forms