Winform控件学习笔记【第六天】——TreeView
TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立TreeView控件后,我们可以展开和折叠、显示或隐藏其中的节点。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。
下面是一些常用的方法和属性:
添加节点
1 2 3 | TreeNode tn1 = new TreeNode(textBox1.Text.Trim()); tn1.Name = textBox1.Text.Trim(); treeView1.SelectedNode.Nodes.Add(tn1); |
编辑选中节点
只有当 TreeView 的 LabelEdit 属性设置为 true,此方法才生效。 如果 LabelEdit 设置为 false,将引发异常,并且树节点不会进入可编辑状态。与之对应的是EndEdit()方法来关闭编辑节点。
1 2 | treeView1.LabelEdit = true ; treeView1.SelectedNode.BeginEdit(); |
删除选中节点
1 | treeView1.Nodes.Remove(treeView1.SelectedNode); |
展开选中节点
1 | treeView1.SelectedNode.ExpandAll(); |
折叠选中节点
方法传递的布尔参数为 true 则使子节点保持当前状态;为 false 则折叠子节点。
1 | treeView1.SelectedNode.Collapse( false ); |
选中节点折叠展开状态切换
1 | treeView1.SelectedNode.Toggle(); |
显示复选框
与之相关联的是Checked属性获取或设置一个值,用以指示树节点是否处于选中状态。
1 | treeView1.CheckBoxes = true ; |
选中节点路径
1 | treeView1.SelectedNode.FullPath |
选中节点树深度
1 | treeView1.SelectedNode.Level; |
树节点数目
1 | treeView1.GetNodeCount( true ); |
详细使用可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.treenode(v=vs.100).aspx
实例1.TreeView控件显示本地磁盘、文件夹
遍历磁盘代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | //来源:http://zxlovenet.cnblogs.com private void ForeachDisk() { DriveInfo[] dr = DriveInfo.GetDrives(); string driveName = "" ; foreach (DriveInfo d in dr) { switch (d.DriveType) { case DriveType.Fixed: driveName = "本地磁盘(" + d.Name.Substring(0, 2) + ")" ; break ; case DriveType.Removable: driveName = "可移动磁盘(" + d.Name.Substring(0, 2) + ")" ; break ; case DriveType.CDRom: driveName = "DVD驱动器(" + d.Name.Substring(0, 2) + ")" ; break ; case DriveType.Network: driveName = "网络驱动器(" + d.Name.Substring(0, 2) + ")" ; break ; default : driveName = "未知(" + d.Name + ")" ; break ; } this .treeView1.Nodes.Add(d.Name, driveName); } } |
显示文件夹内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //来源:http://zxlovenet.cnblogs.com private void ReadDir(TreeNodeMouseClickEventArgs e) { if (e.Node.Nodes.Count > 0) { if (e.Node.IsExpanded) { e.Node.Collapse(); } else { e.Node.Expand(); } } else { if (Directory.Exists(e.Node.Name)) { try { string [] allDirectory = Directory.GetDirectories(e.Node.Name); foreach ( string s in allDirectory) { e.Node.Nodes.Add(s, s.Remove(0, s.LastIndexOf( "//" ) + 1)); } listBox1.Items.Clear(); string [] allFiles = Directory.GetFiles(e.Node.Name); foreach ( string sf in allFiles) { listBox1.Items.Add(sf.Remove(0, sf.LastIndexOf( "//" ) + 1)); } } catch { } } e.Node.Expand(); } } |
实例2.TreeView实现拖拽操作
后台代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | //来源:http://zxlovenet.cnblogs.com private Point Position = new Point(0, 0); private void Form1_Load( object sender, EventArgs e) { this .treeView1.AllowDrop = true ; this .treeView1.ExpandAll(); } private void treeView1_ItemDrag( object sender, ItemDragEventArgs e) { DoDragDrop(e.Item, DragDropEffects.Move); } private void treeView1_DragEnter( object sender, DragEventArgs e) { if (e.Data.GetDataPresent( typeof (TreeNode))) e.Effect = DragDropEffects.Move; else e.Effect = DragDropEffects.None; } private void treeView1_DragDrop( object sender, DragEventArgs e) { TreeNode myNode = null ; if (e.Data.GetDataPresent( typeof (TreeNode))) { myNode = (TreeNode)(e.Data.GetData( typeof (TreeNode))); } else { MessageBox.Show( "error" ); } Position.X = e.X; Position.Y = e.Y; Position = treeView1.PointToClient(Position); TreeNode DropNode = this .treeView1.GetNodeAt(Position); // 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身 if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode) { TreeNode DragNode = myNode; // 将被拖拽节点从原来位置删除。 myNode.Remove(); // 在目标节点下增加被拖拽节点 DropNode.Nodes.Add(DragNode); } // 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下 if (DropNode == null ) { TreeNode DragNode = myNode; myNode.Remove(); treeView1.Nodes.Add(DragNode); } } |
下载:DEMO
PS:又是好几天没有更新了,这周是比较忙的,周六一整天的比赛,晚上坚持更新。
Q Q: 121866673
来源: http://zxlovenet.cnblogs.com
声明: 本文原创发表于博客园,作者为初行本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
消息:此博客已停止更新,想了解最新博客更新请关注我的新博客 Noogel's notes
推荐: 推荐使用为知笔记(WizNote),它是电脑、手机、平板上都能用的云笔记软件,还可以分类管理和共享资料,使用我的邀请码注册:https://note.wiz.cn/i/06102d9e
打赏: 如果您觉得文章对您的工作有帮助,请小额打赏我一些,鼓励我写出更好的文章!

微信打赏

支付宝打赏
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库