C#编程,TreeView控件的学习
新建一个WinForm项目之后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充建立树节点。数据库的结构如下:
ID Title P_ID
a 根节点 0
b 子节点1 a
c 子节点2 a
默认P_ID=0的节点为根节点a,下面有2个子节点b、c。
ID列为不重复的文本,在treeView1中表示TreeNode的Name属性;
Title列为普通文本,在treeView1中表示TreeNode的Text属性;
P_ID列为父ID,在treeView1中表示TreeNode的Tag属性。
一、用递归方法进行历遍添加所有节点到treeView1。
在WinForm的Load事件中载入并建立treeView1的节点,用了几个自定义的方法完成添加节点的操作:
private void CreatTree()
{
TreeNode node = new TreeNode(); //定义根节点
Model.getByPID("0"); //自定义的获取根节点的方法,并转为属性
node.Name = Model.ID; //将类Model的各个属性赋值给根节点
node.Text = Model.Title;
node.Tag = Model.P_ID;
treeView1.Nodes.Add(node);//将节点node作为treeView1的根节点
cTree(node,node.Name); //调用另一个方法为根节点添加其他
treeView1.ExpandAll(); //展开所有节点
}
private void cTree(TreeNode node,string ID)//当前节点,节点的ID
{
node.Name = ID;
DataTable table = PublicTools.AccessHelper.ExecuteDataTable("select * from CodeEditor where P_ID = @P_ID", new OleDbParameter("@P_ID", ID)); //用自定义的方法根据当前节点的ID查找所有子节点
foreach( DataRow row in table.Rows)//历遍所有子节点,赋值并添加
{
TreeNode n =new TreeNode();
n.Name = (string)row["ID"];
n.Text = (string)row["Title"];
n.Tag = (string)row["P_ID"];
node.Nodes.Add(n);
cTree(n,n.Name); //用递归的方法添加完整的树节点
}
}
二、处理一般的事件和设置
1、树节点的单击事件:treeView1_AfterSelect,代码:
//使节点标签可编辑
treeView1.LabelEdit = true;
2、树节点修改完成后事件:treeView1_AfterLabelEdit,代码:
//使节点标签不可编辑
treeView1.LabelEdit = false;
3、树节点失去焦点仍高亮的设置:
(1)
treeView1.HideSelection = false; //一般在完成树节点之后
(2)treeView1_DrawNode 事件:
e.DrawDefault = true;
//这里只是一个默认值,可添加重绘节点的具体代码
三、TreeView控件和TreeNode的常用成员:
AfterSelect //单击事件
TreeView.HideSelection = False; //可让选中节点保持高亮
Node = TreeView.SelectedNode; //已选中的当前树节点
string I = treeView1.SelectedNode.Index.ToString()
//当前节点的索引值,由0开始,只限于同父、同级的节点集合
treeView1.SelectedNode.Text = “String”; //设置当前节点的文本
string String = treeView1.SelectedNode.Text; //获取当前节点的文本
treeView1.SelectedNode.FullPath.ToString();
//当前节点的全路径,从根节点开始到当前节点,由节点的Text属性加“\”连接而成的字符串,最后的节点后面没有“\”
treeView1.SelectedNode.Tag;
//当前节点的其他信息,可以是各种类型,也可以是对象
treeView1.SelectedNode.Name:树节点的名称,也是(TreeNodes集合)TreeNodeCollection 中该节点的键(key)
treeView1.SelectedNode.Parent; //当前树节点的父树节点。
treeView1.SelectedNode.Level; //树视图的深度(从零开始)
四、在treeView控件中,成员Nodes其实就是一个TreeNode的集合,所以也可以使用TreeNodeCollection的成员:
TreeNodeCollection 类,TreeNodes集合类
treeView1.Nodes.Add(字符串);
//以字符串为显示文本添加节点到树集合的末尾
treeView1.Nodes.Add(TreeNode);
//将现有的树节点添加到树节点集合的末尾。
treeView1.Nodes.Add(String, String):创建具有指定键和文本的新树节点,并将其添加到集合中。
treeView1.Nodes.Find(string key,bool searchAllChildren):查找具有指定键的树节点,可以选择搜索子节点,返回一个list[]。
C#编程,TreeView控件的学习的更多相关文章
- 【ASP.NET 进阶】TreeView控件学习
这几天上班没事做,也不好打酱油,学点没接触过的新东西吧,基本了解了下TreeView控件. TreeView 控件用于在树结构中显示分层数据,例如目录或文件目录等. 下面看代码吧: 1.效果图 2.静 ...
- VB TreeView控件使用详解
来源:http://www.newxing.com/Tech/Program/VisualBasic/TreeView_587.html 三小时快速掌握TreeView树状控件的使用.能不能掌握控件的 ...
- duilib进阶教程 -- TreeView控件(6)
代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...
- 如何:使用TreeView控件实现树结构显示及快速查询
本文主要讲述如何通过使用TreeView控件来实现树结构的显示,以及树节点的快速查找功能.并针对通用树结构的数据结构存储进行一定的分析和设计.通过文本能够了解如何存储层次结构的数据库设计,如何快速使用 ...
- [转] C#2010 在TreeView控件下显示路径下所有文件和文件夹
原文 张丹-小桥流水,C#2010 在TreeView控件下显示路径下所有文件和文件夹 C#2010学习过程中有所收获,便总结下来,希望能给和我一样在学习遇到困难的同学提供参考. 本文主要介绍两个自定 ...
- VB TreeView控件使用详解(有趣的示例)
第一小时:学习直接用代码将数据填充到树控件中. 为什么要先学习直接用代码将数据填充到树控件中?因为这种方法是最简单的,代码也最容易理解,学习树控件,先将这个学会,已经掌握了一半,所以先不要急着想怎么将 ...
- WPF中TreeView控件数据绑定和后台动态添加数据(一)
数据绑定: 更新内容:补充在MVVM模式上的TreeView控件数据绑定的代码. xaml代码: <TreeView Name="syntaxTree" ItemsSourc ...
- TreeView控件使用
treeView1.SelectedNode = treeView1.Nodes[0]; //选中当前treeview控件的根节点为当前节点添加子节点: TreeNode tmp; tmp = n ...
- 基于Treeview控件遍历本地磁盘
一.前言 Treeview控件常用于遍历本地文件信息,通常与Datagridview与ImageList搭配.ImageList控件用于提供小图片给TreeView控件,DatagridView通常显 ...
随机推荐
- ionic xcode8 App上传应用详细流程
第一步: 进入开发者官网 https://developer.apple.com 2.证书 序号1:开发者证书,用于真机调试 序号2:上传证书,用于发布最终版 3.证书申请 由于我现在是要发布 ...
- 拒绝“高冷”词汇!初学C#中实用的泛型!
初学C#,整天对着业务逻辑,写反反复复的“过程型”代码逻辑十分枯燥,不如用点新东西提升一下代码效率,让代码看起来更有逼格?! 好,下面我们看看C#中简单易学的泛型. 首先,我写了一个这样的方法 --- ...
- ie下警告console未定义
低版本IE6/7/8/9浏览器没有定义console对象,所以代码会中断执行.自己测试,ie11也没有(打开控制台的情况下可以用) 可以用如下代码完美解决. window.console = wind ...
- [工具]JSON校验、转换在线工具
1. 在线JSON代码检验.检验.美化.格式化工具[简单易用的格式化工具]: http://tools.jb51.net/code/json 2. JSON在线格式化工具[代码高亮及可控缩进大小的格式 ...
- C# 读取Excel,一波华丽的操作
C# 读取Excel,其实有很多方法.但是今天要来一波华丽的操作. 先看效果: 以上这波操作使用了 ExcelDataReader 和 ExcelDataReader.DataSet 完成的. Exc ...
- c# async Task await Result 死锁
最近项目数据量较大,使用 async Task异步增加执行效率 遇到问题,当前有2个计算非常耗时,现在需要你优化一下,这2个计算并行执行,2个计算执行完成后将2个结果sum返回给用户 当前我是这样实现 ...
- 11-使用EF操作数据库
本篇博客对应视频讲解 回顾 上一篇教程我们讲了XML与JSON的序列化问题,我们可以看到序列化实际上也是不同形式的转换,我们通常要以字节流的形式做中转.同时我们也可以看到,对于序列化这种常见的需求,我 ...
- Statement与PreparedStatement区别
1.性能区别 Statement statement = conn.createStatement(); PreparedStatement preStatement = conn.prepareSt ...
- MySQL(分组、连表操作、备份数据库)
day58 分组 参考:https://www.cnblogs.com/xp796/p/5262187.html select dept, max(salary) from department gr ...
- 在Load average 高的情况下如何鉴别系统瓶颈
在Load average 高的情况下如何鉴别系统瓶颈.是CPU不足,还是io不够快造成? 或是内存不足? 一:查看系统负载vmstat procs -----------memory-------- ...