using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; //自定义封装控件: //(1)控件为成员【本代码使用此方法】:https://blog.csdn.net/wanlong360599336/article/details/7578447 //(2)继承控件:https://blog.csdn.net/aoshilang2249/article/details/41252781?utm_medium=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_bbs_down.none-task-blog-baidujs-2.nonecase namespace TreeViewTc { public delegate void Delegate1(string vinfo);//申明委托类型:用于进度条的更新 public partial class TreeViewTc2 : UserControl { public TreeViewTc2() { InitializeComponent(); treeView1.ExpandAll(); //treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick); //this.treeView1.ContextMenuStrip = this.contextMenuStrip1;//这行代码有问题:在控件treeView1任何位置鼠标右击都会显示右键菜单 } void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Right) return; if (e.Node.Parent == null || e.Node == null) return; treeView1.SelectedNode = e.Node; contextMenuStrip1.Show(treeView1, e.X, e.Y); } public event Delegate1 PlotSifEvent;//申明事件 private void treeView1_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { if (e.Button != MouseButtons.Left) return; if (e.Node.Parent == null || e.Node == null) return; treeView1.SelectedNode = e.Node; string nodeName = treeView1.SelectedNode.Name; if (PlotSifEvent != null) { PlotSifEvent(nodeName); } } private void TreeViewTc2_Load(object sender, EventArgs e) { ////实例化TreeNode类 TreeNode(string text,int imageIndex,int selectImageIndex) //TreeNode rootNode = new TreeNode("我的电脑"); //载入显示 选择显示 //rootNode.Tag = "我的电脑"; //树节点数据 //rootNode.Text = "我的电脑"; //树节点标签内容 //treeView1.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.IO // var 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; //选择显示图片 // treeView1.Nodes.Add(tNode); //加载驱动节点 // tNode.Nodes.Add(""); // } // break; // } //} //rootNode.Expand();//展开树状视图 //string path = @"D:\Desktop\0easySifProject"; //Initialize(path); } private string mPath; public void Initialize(string path) { string[] dics = Directory.GetDirectories(path); foreach (string dic in dics) { if (dic.Contains("sifTmp")) { continue; } TreeNode subNode = new TreeNode(new DirectoryInfo(dic).Name);//实例化 subNode.Name = new DirectoryInfo(dic).FullName;//完整目录 subNode.Tag = subNode.Name; treeView1.Nodes.Add(subNode); subNode.Nodes.Add("");//加载空节点 实现+号 } mPath = path; } public void reInitialize() { clearAll(); Initialize(mPath); } public void clearAll() { treeView1.Nodes.Clear(); } private void treeView1_AfterSelect(object sender, TreeViewEventArgs e) { } public void AddRootNode(string NodeName) { //添加根节点 treeView1.Nodes.Add(NodeName.Trim()); } private void btnAddSonNode_Click(string SonNodeName) { if (treeView1.SelectedNode == null) { MessageBox.Show("请选择要添加子节点的节点!"); return; } treeView1.SelectedNode.Nodes.Add(SonNodeName.Trim()); } private void btnDelete_Click(object sender, EventArgs e) { } private void treeView1_AfterExpand(object sender, TreeViewEventArgs e) { e.Node.Expand(); } private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e) { TreeViewItems.Add(e.Node); } public event Delegate1 DeleteEvent;//申明事件 private void deleteToolStripMenuItem_Click(object sender, EventArgs e) { string nodeName = treeView1.SelectedNode.Name; if (MessageBox.Show("确认删除?", "此删除不可恢复", MessageBoxButtons.YesNo) == DialogResult.Yes) { if (DeleteEvent != null) { DeleteEvent(nodeName); treeView1.SelectedNode.Remove(); } } } private void treeView1_MouseUp(object sender, MouseEventArgs e) { } public event Delegate1 SaveAsEvent;//申明事件 private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) { string nodeName = treeView1.SelectedNode.Name; if (SaveAsEvent != null) { SaveAsEvent(nodeName); } } } public static class TreeViewItems { public static void Add(TreeNode treeNode) { //try..catch异常处理 try { //判断"我的电脑"Tag 上面加载的该结点没指定其路径 if (treeNode.Tag.ToString() != "我的电脑") { treeNode.Nodes.Clear();//清除空节点再加载子节点 TreeNode tNode = treeNode;//获取选中\展开\折叠结点 string path = tNode.Name;//路径 //获取"我的文档"路径 if (treeNode.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("");//加载空节点 实现+号 } //获取目录中的文件 string[] files = Directory.GetFiles(path); foreach (string file in files) { string[] nameTmp = file.Split('\\'); string name = nameTmp[nameTmp.Length - 1]; TreeNode subNode = new TreeNode(name);//实例化 subNode.Name = file;//完整目录 subNode.Tag = subNode.Name; //subNode.ImageIndex = IconIndexes.ClosedFolder;//获取节点显示图片 //subNode.SelectedImageIndex = IconIndexes.OpenFolder;//选择节点显示图片 tNode.Nodes.Add(subNode); } } } catch (Exception msg) { MessageBox.Show(msg.Message);//异常处理 } } } }