Winform控件学习笔记【第六天】——TreeView

news/2024/6/15 9:14:07

TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立TreeView控件后,我们可以展开和折叠、显示或隐藏其中的节点。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。

 

下面是一些常用的方法和属性:

添加节点

TreeNode tn1 = new TreeNode(textBox1.Text.Trim());
tn1.Name = textBox1.Text.Trim();
treeView1.SelectedNode.Nodes.Add(tn1);

 

编辑选中节点

只有当 TreeView 的 LabelEdit 属性设置为 true,此方法才生效。 如果 LabelEdit 设置为 false,将引发异常,并且树节点不会进入可编辑状态。与之对应的是EndEdit()方法来关闭编辑节点。

treeView1.LabelEdit = true;
treeView1.SelectedNode.BeginEdit();

 

删除选中节点

treeView1.Nodes.Remove(treeView1.SelectedNode);

 

展开选中节点

treeView1.SelectedNode.ExpandAll();

 

折叠选中节点

方法传递的布尔参数为 true 则使子节点保持当前状态;为 false 则折叠子节点。

treeView1.SelectedNode.Collapse(false);

 

选中节点折叠展开状态切换

treeView1.SelectedNode.Toggle();

 

显示复选框

与之相关联的是Checked属性获取或设置一个值,用以指示树节点是否处于选中状态。

treeView1.CheckBoxes = true;

 

选中节点路径

treeView1.SelectedNode.FullPath

 

选中节点树深度

treeView1.SelectedNode.Level;

树节点数目

treeView1.GetNodeCount(true);

 

详细使用可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.treenode(v=vs.100).aspx

 

实例1.TreeView控件显示本地磁盘、文件夹

遍历磁盘代码:

        //来源: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);
            }
        }

 

显示文件夹内容:

        //来源: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实现拖拽操作

        

后台代码:

        //来源: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:又是好几天没有更新了,这周是比较忙的,周六一整天的比赛,晚上坚持更新。


http://www.niftyadmin.cn/n/852645.html

相关文章

互联网公司的项目经理:别轻易脚踩两只船

互联网公司的项目经理:别轻易脚踩两只船 2012-08-05 韩宇斌 上周晨会,挨批了,因为cto认为自己管理的团队有些乱,而自己又只会抱怨,而不是自己去解决问题。有些郁闷,想总结点东西,但不知道问题…

tensorflow使用日记(一)

TensorFlow函数:tf.variables_initializer tf.variables_initializer(var_list,##要初始化的 Variable 对象列表nameinit##返回操作的可选名称 )##返回运行所有指定变量的初始值设定项的操作。返回一个初始化变量列表的操作。 在会话(session&#xff0…

最短路径问题【浙江大学复试上机题】【最短路径】

题目描述 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。 输入描述: 输入n,m,点的编号是1~…

ArcGIS.Server.9.3和ArcGIS API for Flex的GeometryService和量算距离面积(十一)

目的: 1.ArcGIS API for Flex用GeometryService实现量算距离和面积,本例子主要包含GeometryService的project、simplify、lengths、areasAndLengths等实现。准备工作:1.在ArcGIS.Server.9.3发布一个叫USA的Map Service。 2.在ArcGIS.Server.9…

抽象类和方法,接口和抽象类

2019独角兽企业重金招聘Python工程师标准>>> 抽象方法与抽象类: 当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为ab…

tensorflow使用日记(二)

Arrays and working with Images 首先处理图片 要在一个图片上工作,我们需要安装matplotlib,同时我们也需要安装pillow包(用来支持多种样式的图片格式) 我们可以用conda 来安装(也可以用pip安装) conda …

windows 2003系统,使用diskpart命令安全扩充分区容量。

注:此命令只能对逻辑分区进行扩充,不能扩充系统盘。 最经典的例子: vmware环境中,对某虚拟磁盘进行容量扩充后,打开操作系统,在磁盘管理中会发现多出一部分空闲空间出来,如图: 此时&…

最短路径【上海交大复试机试题】【最小生成树】

题目描述 N个城市&#xff0c;标号从0到N-1&#xff0c;M条道路&#xff0c;第K条道路&#xff08;K从0开始&#xff09;的长度为2^K&#xff0c;求编号为0的城市到其他城市的最短距离 输入描述: 第一行两个正整数N&#xff08;2<N<100&#xff09;M(M<500),表示有…