zoukankan      html  css  js  c++  java
  • Winform控件学习笔记【第六天】——TreeView

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

  • 相关阅读:
    re模块和分组 random模块
    javascript中===和==的区别
    基于jQuery封装一个瀑布流插件
    javascript中天气接口案例
    jQuery中样式和属性模块简单分析
    jQuery中事件模块介绍
    jQueryDOM操作模块(二)
    jQueryDOM操作模块
    jQuery基本选择器模块(二)
    jQuery基本选择器模块
  • 原文地址:https://www.cnblogs.com/zxlovenet/p/3589425.html
Copyright © 2011-2022 走看看