TreeView控件

一、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);
    }
}

二、C# TreeView控件中的nodemouseclick事件

nodemouseclick有两种响应

1:响应单击扩展符"+" 如果不想对该扩展符响应,利用一个判断语句即可解决,代码如下

private void tvMain_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
      if (e.Node.Bounds.Contains(e.Location))
      {
           treeview1.SelectedNode.Toggle();
      }
}        

2:响应单击节点事件

可是每当单击时并不是自己想要的结果,要不是第一次点击没有反应,就是点击这个节点却响应了上次单击要出现的结果,或者是要双击才可响应,解决方法,代码如下:

private void tvMain_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
      tvMain.SelectedNode = e.Node; //一定要先指定e.node,否则不能正确运行
}
时间: 2024-10-10 15:15:53

TreeView控件的相关文章

Win32中TreeView控件的使用方法,类似于资源管理器中文件树形显示方式

首先是头文件,内容如下: #include <tchar.h> #include "..\CommonFiles\CmnHdr.h" #include <Windows.h> #include <WindowsX.h> #include <CommCtrl.h> #include "resource.h" #pragma comment (lib,"comctl32.lib") BOOL InitT

WinForms中TreeView控件的扩展与使用

EXE文件方便大家测试   源码下载 TreeView控件非常的好用,在我的公文系统中,使用TreeView控件选择接收公文的人员,支持单选,可多选 现提取出来,方便大家使用 涉及到的知识点 1:从Xml文件中加载内容显示到TreeView控件中 <?xml version="1.0" encoding="utf-8"?> <根目录> <组 名称="校长" 用户ID="1000"> <

ASP.NET - TreeView控件,只操作最后一级节点

效果: 绑定TreeView控件:http://www.cnblogs.com/KTblog/p/4792302.html 主要功能: 点击节点的时候,只操作最后一级的节点,其他节点跳过不执行代码. 代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Web.UI.WebControls; 6 7 nam

在工作表左侧中添加TreeView控件

开发环境基于VSTO:visual studio 2010,VB .Net,excel 2007,文档级别的定制程序. 需求是在sheet的左侧停靠System.Windows.Forms.TreeView控件,实现类似资源浏览器的效果,另外,tree节点使用自定义的图标,支持复选框. 首先准备好树节点的图标,使用visual studio 2010自带的图标可以省去很多麻烦(在安装目录\Common7\VS2010ImageLibrary).我挑选了4个16x16大小的图标拷贝到vsto工程下

将MenuStrip控件中的信息添加到TreeView控件中【转载】

本文详细介绍怎样将MenuStrip控件中的信息添加到TreeView控件中 首先在WinForm窗体中添加一个MenuStrip控件和TreeView控件,根据个人的爱好把控件布局好后.在窗体的加载事件中(根据自己的情况而定)添加如下的代码: /// <summary>   /// 窗体加载时事件   /// </summary>   /// <param name="sender"></param>   /// <param n

如何:使用TreeView控件实现树结构显示及快速查询

本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用TreeView控件生产树,以及如何快速查找树节点. 关键词:C# TreeView.树结构存储.树节点查找.层次结构 一.      概述: 树结构(层次结构)在项目的使用中特别常见,在不同项目中使用的控件可能不同(如:在Extjs中使用的是TreePanel控件,WinForm中可能用的是Tre

TreeView控件的应用

下面展示的是一个用Treeview控件编辑的一个住房信息管理系统的简单domo,其中Form1为主界面,Form2象征性的展示每一个子项: Form1: namespace 用树型列表动态显示菜单 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary&g

TreeView控件使用

treeView1.SelectedNode = treeView1.Nodes[0];  //选中当前treeview控件的根节点为当前节点添加子节点:  TreeNode tmp; tmp = new TreeNode("需要添加的内容");  treeView1.SelectedNode.Nodes.Add(tmp);  treeView1.SelectedNode = tmp; 为父节点添加子节点: TreeNode tmp;     tmp = new TreeNode(&q

可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取)

可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 分类: SharePoint2011-12-23 14:44 1584人阅读 评论(0) 收藏 举报 文档sharepointurl测试stringforms 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 1.在部署的sharepoint网站中新建一个名为“测试文档库”的文档库,并添加各级的子文件夹和子文件,用于测试 2.在VS2010中新建空

b/s和C/S方法用C#递归方法把数据表加载到treeview控件中

先看一下数据库的结构: 表结构如下所示: Num                   Name                                 fatherNum       BZ 01                      总节点                                      0              ...... 0101                   第一个一级节点                          01