演練:使用設計器創建帶有 ListView 和 TreeView 控件的資源管理器樣式的界面
Visual Studio 的一個優點是能夠在短時間內創建具有專業級外觀的 Windows 窗體應用程序。 通常情況下,創建一個帶有 ListView 和 TreeView 控件的用戶界面 (UI),該界面類似於 Windows 操作系統的 Windows 資源管理器。 Windows 資源管理器顯示了用戶計算機上的文件和文件夾的層次結構。
顯示的對話框和菜單命令可能會與“幫助”中的描述不同,具體取決於您現用的設置或版本。 若要更改設置,請在“工具”菜單上選擇“導入和導出設置”。 有關更多信息,請參見 使用設置。 |
創建包含 ListView 和 TreeView 控件的窗體
-
在“文件”菜單上指向“新建”,再單擊“項目”。
-
在“新建項目”對話框中,請執行以下操作:
-
在類別中選擇“Visual Basic”或“Visual C#”。
-
在模板列表中,選擇“Windows 窗體應用程序”。
-
-
單擊“確定”。 隨即便會創建一個新的 Windows 窗體項目。
-
向該窗體添加一個 SplitContainer 控件,並將其 Dock 屬性設置為 Fill。
-
向該窗體中添加一個名為 imageList1 的 ImageList,然后使用“屬性”窗口按所列順序添加兩個圖像:一個文件夾圖像和一個文檔圖像。
-
向該窗體添加一個名為 treeview1 的 TreeView 控件,將其置於 SplitContainer 控件的左側。 在 treeView1 的“屬性”窗口中,執行以下操作:
-
向該窗體中添加一個名為 listView1 的 ListView 控件,將其置於 SplitContainer 控件的右側。 在 listview1 的“屬性”窗口中,執行以下操作:
-
實現代碼以便將節點和子節點填充到 TreeView 中。 將該代碼添加到 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); } }
-
由於以前的代碼使用 System.IO 命名空間,因此需要在窗體頂部添加 using 或 import 語句。
using System.IO;
-
在窗體的構造函數或 Load 事件處理方法中,調用上一步中的設置方法。 將該代碼添加到窗體構造函數中。
public Form1() { InitializeComponent(); PopulateTreeView(); }
-
處理 treeview1 的 NodeMouseClick 事件,實現代碼以便在單擊某個節點時,用該節點的內容來填充 listview1。 將該代碼添加到 Form1 類中。
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); }
如果使用的是 C#,請確保將 NodeMouseClick 事件與其事件處理方法相關聯。 將該代碼添加到窗體構造函數中。
this.treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);