Visual Studio 的优点之一是时间的能够创建具有专业外观的 Windows 窗体应用程序在一个短量。 通常情况下,创建一个带有 ListView 和 TreeView 控件的用户界面 (UI),该界面类似于 Windows 操作系统的 Windows 资源管理器。 Windows 资源管理器显示了用户计算机上的文件和文件夹的层次结构。
注意 |
---|
显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 有关更多信息,请参见使用设置。 |
创建包含 ListView 和 TreeView 控件的窗体
-
在"文件"菜单上,指向"新建",再单击"项目"。
-
在“新建项目”对话框中,请执行以下操作:
-
在类别中选择 Visual Basic 或 Visual C#。
-
在模板列表中选择 的 Windows 窗体应用程序。
-
-
单击“确定”。 随即便会创建一个新的 Windows 窗体项目。
-
向该窗体添加一个 SplitContainer 控件,并将其 Dock 属性设置为 Fill。
-
添加一个 ImageList名为 imageList1窗体并使用属性窗口中添加两个图像: 文件夹图像和中的文档图像 的顺序。
-
向该窗体添加一个名为 treeview1 的 TreeView 控件,将其置于 SplitContainer 控件的左侧。 在属性窗口中的 treeView1执行以下操作:
-
向该窗体中添加一个名为 listView1 的 ListView 控件,将其置于 SplitContainer 控件的右侧。 在属性窗口中的 listview1执行以下操作:
-
将 Dock 属性设置为 Fill。
-
将 View 属性设置为 Details。
-
单击 Columns 属性中的椭圆 (),以打开 ColumnHeader 集合编辑器。 添加三列,并将其 Text 属性分别设置为 Name、Type 和 Last Modified。 单击“确定”关闭对话框。
-
将 SmallImageList 属性设置为 imageList1。
-
-
实现代码以便将节点和子节点填充到 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);