private void zimulu(TreeNode node)//在点开节点的一瞬间,解析当前目录的第三级目录 { try//对错误或者权限不作处理 { //根据获得的完整目录得到该目录下的子目录 foreach (var dirinfor in new DirectoryInfo(node.Tag.ToString()).GetDirectories()) { //依据目录的完整目录获取其子目录,否则找不到文件 //以子目录的文件名为名称创建树节点 var n = new TreeNode(dirinfor.Name); n.Tag = dirinfor.FullName;//将子目录的完整目录传给创建的树节点, //使所有的子目录都有完整目录, //便于调用此函数解析当前节点的第三级目录时, //能够得到子目录完整目录 node.Nodes.Add(n);//将创建的树节点添加到当前目录分配的树节点的集合中,子目录形成 } } catch { } } private void Form1_Load(object sender, EventArgs e) { foreach (var diver in Environment.GetLogicalDrives())//获取操作平台的驱动器名称 { var node = new TreeNode(diver);//依据驱动器的目录创建第一级树节点 node.Tag = diver;//将驱动器的完整目录赋给第一级节点 tvwfile.Nodes.Add(node);//将创建的节点添加到tvwfile分配的树节点的集合中 zimulu(node);//调用该函数,解析当前节点下的子目录 } } private void tvwfile_BeforeExpand(object sender, TreeViewCancelEventArgs e) { foreach (TreeNode node in e.Node.Nodes/*操作节点下的子目录集合*/)//遍历操作节点下的子目录集合 { zimulu(node);//调用该函数,当前的子目录具有完整目录 } } private void tvwfile_BeforeCollapse(object sender, TreeViewCancelEventArgs e) { foreach (TreeNode node in e.Node.Nodes) { node.Nodes.Clear();//当点击折叠的一瞬间,除当前节点外,其所有的子目录全部关闭 //其子目录不会清空,但是其第三级目录已被清空 } } private void tvwfile_BeforeSelect(object sender, TreeViewCancelEventArgs e) { listView1.Items.Clear(); try { //获取该完整目录下所有的文件和子目录 foreach (var file in new DirectoryInfo(e.Node.Tag.ToString()).GetFileSystemInfos()) { var f = new ListViewItem(file.Name); f.SubItems.Add(file.LastAccessTime.ToLocalTime().ToString()); listView1.Items.Add(f);//将读取的所有文件和文件夹添加到该集合中 } } catch { } }
//左边空白区域是treeview Dock是left 中间黑线是splitter Dock是left 右边是listview Dock是fill view是details
原文:http://www.cnblogs.com/liujianshe1990-/p/5125881.html