自制一个简易资源管理器----TreeView控件
第一步、新建project,进行基本设置;(Set as StartUp Project;View/Toolbox/TreeView)
第二步、开始添加节点
添加命名空间using System.IO;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 using System.IO; 11 12 namespace _ResouceManager_ 13 { 14 public partial class Form1 : Form 15 { 16 public Form1() 17 { 18 InitializeComponent(); 19 } 20 21 private void Form1_Load(object sender, EventArgs e) 22 { 23 //这里是资源管理器的根路径 24 string strRoot = @"H:自制资源管理器";//路径 25 CreateParent(strRoot); 26 } 27 28 private void CreateParent(string strRoot) 29 { 30 //创建根节点parent 31 TreeNode parent = new TreeNode(); 32 DirectoryInfo di=new DirectoryInfo(strRoot); 33 parent.Text= di.Name ; 34 parent.Tag = di.FullName; 35 36 //添加父节点 37 tvResouceManager.Nodes.Add(parent); 38 39 //创建子节点 40 CreateChild(strRoot,parent); 41 //展开所有节点 42 parent.ExpandAll(); 43 44 } 45 46 private void CreateChild(string path,TreeNode parent ) 47 { 48 DirectoryInfo di = new DirectoryInfo(path); 49 //所有的子文件夹 50 DirectoryInfo[] dirs = di.GetDirectories(); 51 //遍历子文件夹 52 foreach(DirectoryInfo dir in dirs) 53 { 54 //创建子节点 55 TreeNode child = new TreeNode(); 56 child.Text = dir.Name; 57 //child.Tag = dir.FullName; 58 59 //添加子节点 60 parent.Nodes.Add(child); 61 62 //递归实现多级文件夹的遍历、创建子节点、添加子节点 63 CreateChild(dir.FullName,child); 64 65 //添加文件节点 66 CreateFile(dir.FullName,child); 67 } 68 } 69 70 private void CreateFile(string p, TreeNode child) 71 { 72 DirectoryInfo di = new DirectoryInfo(p); 73 //路径下的所有文件 74 FileInfo[] files = di.GetFiles(); 75 //添加路径下的所有文件 76 foreach(FileInfo file in files) 77 { 78 //创建节点 79 TreeNode tn = new TreeNode(); 80 tn.Text = file.Name; 81 // tn.Tag = file.FullName; 82 83 //添加节点 84 child.Nodes.Add(tn); 85 } 86 } 87 88 } 89 }
这里基本上完成了目录添加,尚不能增加文件、删除文件、移动文件等操作,还需继续努力。
右边是两个文本框,可以进行文本的编辑等(代码不全)。
首先在左边的treeview中点击某个节点,进行判断点击的是哪个节点,如果是.doc或者是.txt就可以编辑(其他文件类型如PDF之类可以自己写代码哦)。
先将上述代码中关于.Tag的注释取消
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 private void tvResouceManager_AfterSelect(object sender, TreeViewEventArgs e) 2 { 3 if (e.Node.Tag == null) return; 4 string path = e.Node.Tag.ToString(); 5 if(path.LastIndexOf(".doc")>0) 6 { 7 //如果点击的是.doc文档,将标题写入上文本框 8 txtTitle.Text = Path.GetFileNameWithoutExtension(e.Node.Text); 9 //文档内容写入下文本框,并使用指定的编码规则进行读文本操作 10 //txtContent.Text = File.ReadAllText(path,Encoding.GetEncoding("utf-8")); 11 txtContent.Text = File.ReadAllText(path, Encoding.Default); 12 } 13 14 } 15 16 private void btnSave_Click(object sender, EventArgs e) 17 { 18 if (tvResouceManager.SelectedNode == null) return; 19 if (tvResouceManager.SelectedNode.Tag == null) return; 20 21 string path = tvResouceManager.SelectedNode.Tag.ToString(); 22 23 if (path.LastIndexOf(".doc") > 0) 24 { 25 string content = txtContent.Text; 26 File.WriteAllText(path, content, Encoding.Default); 27 28 MessageBox.Show("Save Successed"); 29 30 } 31 }