C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图

在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果如下图所示:

一. 界面设计

主窗体是一个Windowss窗体文件,工程命名为SecureTree.分别从工具箱中左边拖一个TreeView控件,名称(Name)为directoryTree;右侧文件列表ListView控件,名称为filesList.然后从工具箱中拖两个ImageList控件,分别命名为directoryIcons和filesIcons.右键directoryIcons点击"选择图像",从本地Resource文件夹中添加图片如下图所示5张图片,同理filesIcons添加Closed Folder.ico图标.

添加完成后,指定directoryTree控件的ImageList属性为directoryIcons,filesList控件的SmallImageList属性为filesIcons绑定图标.我上传了常用的ICON图标免费资源:

二. 代码实现

1.添加IconIndexes枚举类型类,这个枚举类型值与之前添加到directoryIcons图标对应.这样TreeView控件便可显示该结点相对应的图标.

/// <summary>/// IconIndexs类 对应ImageList中5张图片的序列/// </summary>private class IconIndexes{public const int MyComputer = 0;//我的电脑public const int ClosedFolder = 1; //文件夹关闭public const int OpenFolder = 2;//文件夹打开public const int FixedDrive = 3;//磁盘盘符public const int MyDocuments = 4;//我的文档}

2.添加响应主窗体的Load事件,在窗体加载后,获取最顶层电脑驱动器和我的文档信息并加载到TreeView控件中.并添加命名空间:using System.IO;

/// <summary>/// 窗体加载Load事件 初始化/// </summary>private void Form1_Load(object sender, EventArgs e){//实例化TreeNode类 TreeNode(string text,int imageIndex,int selectImageIndex)TreeNode rootNode = new TreeNode("我的电脑",IconIndexes.MyComputer, IconIndexes.MyComputer); //载入显示 选择显示rootNode.Tag = "我的电脑";//树节点数据rootNode.Text = "我的电脑";//树节点标签内容this.directoryTree.Nodes.Add(rootNode);//树中添加根目录//显示MyDocuments(我的文档)结点var myDocuments = Environment.GetFolderPath//获取计算机我的文档文件夹(Environment.SpecialFolder.MyDocuments);TreeNode DocNode = new TreeNode(myDocuments);DocNode.Tag = "我的文档";//设置结点名称DocNode.Text = "我的文档";DocNode.ImageIndex = IconIndexes.MyDocuments;//设置获取结点显示图片DocNode.SelectedImageIndex = IconIndexes.MyDocuments; //设置选择显示图片rootNode.Nodes.Add(DocNode);//rootNode目录下加载节点DocNode.Nodes.Add("");//循环遍历计算机所有逻辑驱动器名称(盘符)foreach (string drive in Environment.GetLogicalDrives()){//实例化DriveInfo对象 命名空间System.IOvar dir = new DriveInfo(drive);switch (dir.DriveType)//判断驱动器类型{case DriveType.Fixed://仅取固定磁盘盘符 Removable-U盘{//Split仅获取盘符字母TreeNode tNode = new TreeNode(dir.Name.Split(‘:’)[0]);tNode.Name = dir.Name;tNode.Tag = tNode.Name;tNode.ImageIndex = IconIndexes.FixedDrive;//获取结点显示图片tNode.SelectedImageIndex = IconIndexes.FixedDrive; //选择显示图片directoryTree.Nodes.Add(tNode);//加载驱动节点tNode.Nodes.Add("");}break;}}rootNode.Expand();//展开树状视图}

3.添加TreeView的AfterExpand事件和BeforeExpand事件.分别是展开结点后实现展开,将要展开前实现加载子目录结点.选择文件夹时会显示不同icon图标.

/// <summary>/// 在结点展开后发生 展开子结点/// </summary>private void directoryTree_AfterExpand(object sender, TreeViewEventArgs e){e.Node.Expand();}/// <summary>/// 在将要展开结点时发生 加载子结点/// </summary>private void directoryTree_BeforeExpand(object sender, TreeViewCancelEventArgs e){TreeViewItems.Add(e.Node);}/// <summary>/// 自定义类TreeViewItems 调用其Add(TreeNode e)方法加载子目录/// </summary>public static class TreeViewItems{public static void Add(TreeNode e){//try..catch异常处理try{//判断"我的电脑"Tag 上面加载的该结点没指定其路径if (e.Tag.ToString() != "我的电脑"){e.Nodes.Clear();//清除空节点再加载子节点TreeNode tNode = e;//获取选中\展开\折叠结点string path = tNode.Name;//路径//获取"我的文档"路径if (e.Tag.ToString() == "我的文档"){path = Environment.GetFolderPath//获取计算机我的文档文件夹(Environment.SpecialFolder.MyDocuments);}//获取指定目录中的子目录名称并加载结点string[] dics = Directory.GetDirectories(path);foreach (string dic in dics){TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name); //实例化subNode.Name = new DirectoryInfo(dic).FullName;//完整目录subNode.Tag = subNode.Name;subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片subNode.SelectedImageIndex = IconIndexes.OpenFolder; //选择节点显示图片tNode.Nodes.Add(subNode);subNode.Nodes.Add("");//加载空节点 实现+号}}}catch (Exception msg){MessageBox.Show(msg.Message);//异常处理}}}挫折其实就是迈向成功所应缴的学费。

C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图

相关文章:

你感兴趣的文章:

标签云: