一、TreeViewe 是由多个类来定义的,TreeView组件是由命名空间“System.Windows.Froms”中的“TreeView”类来定义的,而其中的节点(即Node),是由命名空间“System.Windows.Froms”中的“TreeNode”来定义的。所以在程序中创建一个TreeVirew对象,其实只是创建了一个可以防止检点的“容器”。而在这个容器中加入一个节点,其实就是加入了从“TreeNode”类中创建的一个节点对象;同样删除一个节点,也就是删除一个“TreeNode”对象。

  二、 C#操作TreeView组件中的一些常用方法以及具体实现:

  可以总结为三种基本操作:加入子节点、加入兄弟节点和删除节点

  1.加入子节点

  所谓子节点,就是处于选定节点的下一级节点。加入子节点的具体过程是:首先要在TreeView组件中定位要加入的子节点的位置,然后创建一个节点对象,然后利用TreeVeiw类中对节点的加入方法(即:Add ( )方法),加入此节点对象。下面就是在treeView1组件中加入一个子节点的具体代码:

 //首先判断是否选定组件中的位置if (treeView1.SelectedNode == null){MessageBox.Show("请选择一个节点", "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Information);}else{//创建一个节点对象,并初始化TreeNode tmp;tmp = new TreeNode("节点名称");//在TreeView组件中加入子节点treeView1.SelectedNode.Nodes.Add(tmp);treeView1.SelectedNode = tmp;treeView1.ExpandAll();}

  2.加入兄弟节点

  

  所谓兄弟节点,就是在选定的节点的平级的节点。加入兄弟节点的方法和加入子节点的方法基本一致,只是在最后的实现方法上有着略微的区别。加入兄弟节点的具体步骤,首先也是要确定要加入的兄弟节点所处的位置,接着定义一个节点对象,最后调用TreeView类中对兄弟节点加入的方法,加入此节点对象。加入兄弟节点和加入子节点的最大区别就在于这最后一步。希望读者能够注意。下面是在TreeView组件加入一个兄弟节点的具体代码:

//首先判断是否选定组件中节点的位置if (treeView1.SelectedNode == null){MessageBox.Show("请选择一个节点", "提示信息",MessageBoxButtons.OK, MessageBoxIcon.Information);}else{//创建一个节点对象,并初始化TreeNode tmp;tmp = new TreeNode(textBox1.Text);//在TreeView组件中加入兄弟节点treeView1.SelectedNode.Parent.Nodes.Add(tmp);treeView1.ExpandAll();}

  3.删除节点

  删除节点就是删除TreeView组件中选定的节点,删除节点可以是子节点,也可以是兄弟节点,但无论节点的性质如何,必须保证要删除的节点没有下一级节点,否则必须先删除此节点中的所有下一级节点,然后再删除此节点。删除节点比起上面的二个操作要显得略微简单,具体方法是:首先判断要删除的节点是否存在下一级节点,如果不存在,就调用TreeView类中的Remove ( )方法,就可以删除节点了。下面是删除TreeView组件中节点的具体代码:

//判断选定的节点是否存在下一级节点
if ( treeView1.SelectedNode.Nodes.Count == 0 )
//删除节点
treeView1.SelectedNode.Remove ( ) ;
else
MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信
息" , MessageBoxButtons.OK ,
MessageBoxIcon.Information ) ;

  4.TreeView组件的一些其他常用操作:

    < I > .展开所有节点:

    要展开TreeView组件中的所有节点,首先就要把选定的节点指针定位在TreeView组件的根节点上,然后调用选定组件的ExpandAll方法就可以了,下面是具体代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//展开组件中的所有节点
treeView1.SelectedNode.ExpandAll ( ) ;

    < II > .展开选定节点的下一级节点:

    由于只是展开下一级节点,所以就没有必要用ExpandAll ( )方法了。展开下一级节点只需要调用Expand ( )方法就可以了,下面是具体的实现代码:

treeView1.SelectedNode.Expand ( ) ;

    

    < III > .折叠所有节点:

      折叠所有节点和展开所有节点是一组互操作,具体实现的思路也大致相同,折叠所有节点也是首先要把选定的节点指针定位在根节点上,然后调用选定组件的Collapse ( )就可以了,下面是具体的实现代码:

//定位根节点
treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;
//折叠组件中所有节点
treeView1.SelectedNode.Collapse ( ) ;

  三、实例

using System ;
using System.Drawing ;
using System.Collections ;
using System.ComponentModel ;
using System.Windows .Forms ;
using System.Data ;
namespace 全面掌握TreeView组件的使用方法
{/// Form1 的摘要说明。public class Form1 : Form{private TreeView treeView1 ;private Button button1 ;private Button button2 ;private Button button3 ;private MenuItem menuItem2 ;private MenuItem menuItem3 ;private MenuItem menuItem4 ;private ContextMenu contextMenu1 ;private TextBox textBox1 ;private Label label1 ;/// 必需的设计器变量。private System.ComponentModel.Container components = null ;public Form1 ( ){//初始化窗体中的组件InitializeComponent ( ) ;}/// 清理所有正在使用的资源。protected override void Dispose ( bool disposing ){if ( disposing ){if ( components != null ){components.Dispose ( ) ;}}base.Dispose ( disposing ) ;}private void InitializeComponent ( ){//初始化代码(略)}[ STAThread ]static void Main ( ){Application.Run ( new Form1 ( ) ) ;}private void AddChildNode ( ){//首先判断是否选定组件中的位置if ( treeView1.SelectedNode == null ){MessageBox.Show ( "请选择一个节点" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}else{if ( textBox1.Text != "" ){//创建一个节点对象,并初始化TreeNode tmp ;tmp = new TreeNode ( textBox1.Text ) ;//在TreeView组件中加入子节点treeView1.SelectedNode.Nodes.Add ( tmp ) ;treeView1.SelectedNode = tmp ;treeView1.ExpandAll ( ) ;}else{MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;return ;}}}private void AddParent ( ){//首先判断是否选定组件中节点的位置if ( treeView1.SelectedNode == null ){MessageBox.Show ( "请选择一个节点" , "提示信息" ,  MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}else{if ( textBox1.Text != "" ){//创建一个节点对象,并初始化TreeNode tmp ;tmp = new TreeNode ( textBox1.Text ) ;//在TreeView组件中加入兄弟节点treeView1.SelectedNode.Parent.Nodes.Add ( tmp ) ;treeView1.ExpandAll ( ) ;}else{MessageBox.Show ( "TextBox组件必须填入节点名称!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;return ;}}TreeNode tnode = new TreeNode ( textBox1.Text ) ;}private void treeView1_MouseDown ( object sender , MouseEventArgs e ){if ( e.Button == MouseButtons.Right )contextMenu1.Show ( this , new Point ( e.X , e.Y ) ) ;}private void button1_Click ( object sender , System.EventArgs e ){treeView1.SelectedNode.Expand ( ) ;}private void menuItem2_Click ( object sender , System.EventArgs e ){AddChildNode ( ) ;}private void menuItem3_Click ( object sender , System.EventArgs e ){AddParent ( ) ;}private void menuItem4_Click ( object sender , System.EventArgs e ){//判断选定的节点是否存在下一级节点if ( treeView1.SelectedNode.Nodes.Count == 0 )//删除节点treeView1.SelectedNode.Remove ( ) ;elseMessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;}private void button2_Click ( object sender , System.EventArgs e ){//定位根节点treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;//展开组件中的所有节点treeView1.SelectedNode.ExpandAll ( ) ;}private void button3_Click ( object sender , System.EventArgs e ){//定位根节点treeView1.SelectedNode = treeView1.Nodes [ 0 ] ;//折叠组件中所有节点treeView1.SelectedNode.Collapse ( ) ;}}
}

  四、数据绑定

  默认展开树的级别;0是不展开;1是展开一级;

  1.递归法

public partial class _Default : System.Web.UI.Page
{private void LoadTree(TreeNode parentNode){List<ChinaStates> list = new chinabf().selectByCode(parentNode.Value);if (list.Count == 0){return;}foreach (ChinaStates item in list){TreeNode childNode = new TreeNode();childNode.Text = item.AreaName;childNode.Value = item.AreaCode;parentNode.ChildNodes.Add(childNode);LoadTree(childNode);}}protected void Page_Load(object sender, EventArgs e){TreeNode root = new TreeNode();root.Text = "中国";root.Value = "0001";TreeView1.Nodes.Add(root);LoadTree(root);}
}

  2.for嵌套

public void treeBind()
{TreeNode root = new TreeNode();root.Text = "汉企数据通软件有限公司";root.Value = "H001";root.SelectAction = TreeNodeSelectAction.None;TreeView1.Nodes.Add(root);List<Department> list = new Function().SelectPart();List<Worker> data=new List<Worker>();foreach (Department item in list){TreeNode firstNode = new TreeNode();firstNode.Text = item.Department1;firstNode.Value = item.DepartCode;firstNode.SelectAction = TreeNodeSelectAction.None;root.ChildNodes.Add(firstNode);List<Worker>arr= new Function().SelectWorker(item.Department1);foreach (Worker workers in arr){TreeNode child = new TreeNode();child.Text = workers.Wname;child.Value = workers.Wid.ToString();child.SelectAction = TreeNodeSelectAction.None;firstNode.ChildNodes.Add(child);}}
}

  3.遍历所有子节点,找出选中项

protected void Button1_Click(object sender, EventArgs e)
{List<TreeNode> listNodes = new List<TreeNode>();foreach (TreeNode node in TreeView1.Nodes){if (node != null){FindCheckNode(node, listNodes);}else{return;}}
}private void FindCheckNode(TreeNode node, List<TreeNode> listNodes)
{if (node.Checked){listNodes.Add(node);}foreach (TreeNode childnode in node.ChildNodes){FindCheckNode(childnode, listNodes);}
}

  

转载于:https://www.cnblogs.com/shaobing012/p/4877789.html

treeview 控件使用和数据绑定相关推荐

  1. dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件

    DevExpress提供的树形列表控件TreeList和树形下拉列表控件TreeListLookupEdit都是非常强大的一个控件,它和我们传统Winform的TreeView控件使用上有所不同,我一 ...

  2. matlab treeview,treeview控件

    高分在线等:C#中如何给treeview控件上的节点前添比如有一treeview1控件,需要在其所有节点前均加一静态小图标(所有节点我也新手,正好刚用过这功能.如下: 1. 到工具箱中拖一个image ...

  3. 网站导航(TreeView 控件)

    TreeView 是让人印象最深刻的导航控件之一,不仅因为它允许呈现富树视图,还因为它支持按需填入树的部分(不需要刷新整个页面).但最重要的是,它支持很多样式来改变它的外观. 通过几个基本的属性,可以 ...

  4. WPF 控件专题 TreeView控件详解

    1.TreeView介绍 命名空间:System.Windows.Controls TreeView 表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据. TreeView 是一个 ...

  5. java treeview控件,来自treeview控件的绑定错误

    我遇到了一个问题,如果你能为此提供任何建议,我将非常感激 . 错误信息: System.Windows.Data错误:4:无法找到绑定源,引用'RelativeSource FindAncestor, ...

  6. C# 在DataGridView中,点击单元格调出 TreeView控件 或 ListBox控件

    1.调出 TreeView控件 或  ListBox控件 private void deductGrid1_CellClick(object sender, DataGridViewCellEvent ...

  7. 递归遍历文件夹,并添加到TreeView控件中

    遍历文件夹,并把所有节点增加到TreeView控件中,这里单独写成了一个静态类,传入根目录节点和指定的目录这两个参数即可,可以稍作扩展用于其他方案 View Code 1 using System; ...

  8. WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

    WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色  在B/S开发中,对TreeView控件要改变当前选中节点的颜色比较方便,其有相应的SelectedNodeChanged事件 ...

  9. C# 系统应用之TreeView控件 (一).显示树状磁盘文件目录及加载图标

    在C#系统应用毕设U盘防御软件中需要实现文件不可恢复的删除,首先需要实现类似于资源管理器的界面,通过TreeView控件显示"我的电脑"所有磁盘文件树状目录并加载相应图标.显示结果 ...

最新文章

  1. java 匿名list,java创造匿名对象的两种方法
  2. 【树形DP】树的重心详解+多组例题详解
  3. Active Directory还原工具之三Software Active Directory Recycle Bin PowerPack
  4. 李春平:钱不是奥黛莉赫本给的
  5. mysql的慢查询日志功能_MySQL 慢查询日志
  6. 软件公司与非软件公司区别(纯个人看法)
  7. 爱晚红枫的博客配色----绿野仙踪
  8. Java学习笔记_方法
  9. C++ 字符串指针和字符串指针数组详解
  10. 【服务器实战搭建】centos7下使用yum安装mysql
  11. 祝福神器!微信推出“表情搜索”功能,支持合成个性化祝福表情
  12. 软件获取imei和imsi_获取设备信息(imei、imsi、uuid)的调整使用plus.device.getInfo方法的说明...
  13. 0/0型极限等于多少_两个重要极限的一点理解(下)
  14. 大功率mos管怎么测量好坏,如何用万用表判断mos管的好坏?够全面!
  15. 银行贷款违约风险预测
  16. UEFI(使用EDK2)编程
  17. 青软新获「2022年度山东省软件和信息技术服务业综合竞争力百强企业」等三项荣誉!
  18. AVG神作是如何炼成的? 《逆转裁判》成步堂三部曲解析
  19. C++中编写自己的头文件
  20. ebay架构师总结伸缩性要旨!!

热门文章

  1. HttpClient4文件上传
  2. 给网站外链进行重定向跳转
  3. android ORM框架的性能简单测试(androrm vs ormlite)
  4. ubuntu12.04循环登录,无法进桌面的问题。
  5. SourceInsight下面一直出现unable to write to temp file for saving operation 这样的提示
  6. opencv处理视频颠倒问题
  7. android 8.1.0怎么截屏,vivo Z1i怎么截屏?4种vivo Z1i截图方法
  8. 一致 先验分布 后验分布_「分布式技术」分布式事务最终一致性解决方案,下篇...
  9. 云服务器在哪里创建网站目录,如何在云服务器创建根目录
  10. Angular项目构建指南 - 不再为angular构建而犹豫不决