文档章节

初学C#编程,TreeView控件的学习(WinForm)

清江堤畔
 清江堤畔
发布于 2015/02/15 12:00
字数 879
阅读 6404
收藏 8
点赞 0
评论 0

    新建一个WinForm项目之后,在窗体中放入一个treeView控件(treeView1),根据数据库数据填充建立树节点。数据库的结构如下:

            ID        Title        P_ID

            a          根节点           0

            b          子节点1         a

            c          子节点2         a

    默认P_ID=0的节点为根节点a,下面有2个子节点bc

    ID列为不重复的文本,在treeView1中表示TreeNodeName属性;

    Title列为普通文本,在treeView1中表示TreeNodeText属性;

    P_ID列为父ID,在treeView1中表示TreeNodeTag属性。


一、用递归方法进行历遍添加所有节点到treeView1

WinFormLoad事件中载入并建立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; //一般在完成树节点之后


2treeView1_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[]


© 著作权归作者所有

共有 人打赏支持
清江堤畔
粉丝 3
博文 5
码字总数 2879
作品 0
中山
程序员
C#/winForm界面控件包Xceed SmartUI for .NET下载及使用介绍

原文来自龙博方案网http://www.fanganwang.com/product/5086转载请注明出处 Xceed SmartUI for .NET 相关文章 ImageKit的使用 Themida加壳经常出现的问题 Xtreme.Toolkit.Pro编译教程 Codejo...

netkongjian
2014/05/13
0
0
C# WinForm开发系列 - File

介绍文件目录相关操作, 涉及配置文件使用, 编码转换, Web下载, 加密处理等. (文章及相关代码搜集自网络,仅供学习参考,版权属于原作者! ) 01. 愚翁专栏 CSDN第一期总结之四:Stream的问题 对于...

长征2号
2017/11/08
0
0
Winform开发中另一种样式的OutLookBar工具条

很早的时候,曾经写了一篇随笔《WinForm界面开发之“OutLookBar”工具条》介绍了OutLookBar样式的工具条,得到很多同行的热烈反馈,我个人也比较喜欢这样的工具条布局,因此我很多共享软件中...

长平狐
2012/06/11
1K
0
Winform开发中另一种样式的OutLookBar工具条

很早的时候,曾经写了一篇随笔《WinForm界面开发之“OutLookBar”工具条》介绍了OutLookBar样式的工具条,得到很多同行的热烈反馈,我个人也比较喜欢这样的工具条布局,因此我很多共享软件中...

长平狐
2012/08/22
244
0
C# WinForm开发系列 - XML/XSLT/XPATH

XML在WinForm, Asp.Net, Java, AJAX开发等方面应用, 以及对XML文档基本操作,如XPath检索节点. 当前XML被广泛应用与配置保存, 简单数据存储, 跨平台数据传输, 其身影活跃于Web Services, AJA...

长征2号
2017/07/09
0
0
C# WinForm开发系列 - Thread/Delegate/Event

C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。那我们为什么...

长征2号
2017/10/11
0
0
C# winform treeview node添加右键菜单并选中节点

转自http://www.cnblogs.com/luluping/archive/2010/03/03/1677206.html (1)要向窗体添加一个TreeView控件 (2)再添加一个ContextMenuStrip控件; (3)就要给TreeView添加一个MouseDown事件,代...

山里来的鱼
2015/08/09
0
0
C# 语言表现树形结构—TreeView高级用法指南

最近由于项目的关系,对Microsoft在各种编程语言中提供的TreeView控件做了一些研究。最初在网上查了一下,除了Microsoft的MSDN有些分散的knowledge, 并没有发现有这方面主题文章,于是有了写...

长平狐
2012/06/11
628
0
C# 语言表现树形结构—TreeView高级用法指南

最近由于项目的关系,对Microsoft在各种编程语言中提供的TreeView控件做了一些研究。最初在网上查了一下,除了Microsoft的MSDN有些分散的knowledge, 并没有发现有这方面主题文章,于是有了写...

长平狐
2012/06/08
103
0
winform频繁刷新导致界面闪烁解决方法

一、通过对窗体和控件使用双缓冲来减少图形闪烁(当绘制图片时出现闪烁时,使用双缓冲) 对于大多数应用程序,.NET Framework 提供的默认双缓冲将提供最佳效果。默认情况下,标准 Windows 窗体...

hpnet_zsh
02/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

idea tomcat 远程调试

tomcat 配置 编辑文件${tomcat_home}/bin/catalina.sh,在文件开头添加如下代码。    CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7829" Idea端配......

qwfys
今天
1
0
遍历目录下的文件每250M打包一个文件

#!/usr/bin/env python # -*- utf-8 -*- # @Time : 2018/7/20 0020 下午 10:16 # @Author : 陈元 # @Email : abcmeabc@163.com # @file : tarFile.py import os import tarfile import thr......

寻爱的小草
今天
1
0
expect同步文件&expect指定host和要同步的文件&构建文件分发系统&批量远程执行命令

20.31 expect脚本同步文件 expect通过与rsync结合,可以在一台机器上把文件自动同步到多台机器上 编写脚本 [root@linux-5 ~]# cd /usr/local/sbin[root@linux-5 sbin]# vim 4.expect#!/...

影夜Linux
今天
1
0
SpringBoot | 第九章:Mybatis-plus的集成和使用

前言 本章节开始介绍数据访问方面的相关知识点。对于后端开发者而言,和数据库打交道是每天都在进行的,所以一个好用的ORM框架是很有必要的。目前,绝大部分公司都选择MyBatis框架作为底层数...

oKong
今天
13
0
win10 上安装解压版mysql

1.效果 2. 下载MySQL 压缩版 下载地址: https://downloads.mysql.com/archives/community/ 3. 配置 3.1 将下载的文件解压到合适的位置 我最终将myql文件 放在:D:\develop\mysql 最终放的位...

Lucky_Me
今天
2
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

问题终结者
今天
2
0
expect脚本同步文件expect脚本指定host和要同步的文件 构建文件分发系统批量远程执行命令

expect脚本同步文件 在一台机器上把文件同步到多台机器上 自动同步文件 vim 4.expect [root@yong-01 sbin]# vim 4.expect#!/usr/bin/expectset passwd "20655739"spawn rsync -av ro...

lyy549745
今天
1
0
36.rsync下 日志 screen

10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 screen工具 10.32/10.33 rsync通过服务同步: rsync还可以通过服务的方式同步。那需要开启一个服务,他的架构是cs架构,客户端服务...

王鑫linux
今天
1
0
matplotlib 保存图片时的参数

简单绘图 import matplotlib.pyplot as pltplt.plot(range(10)) 保存为csv格式,放大后依然很清晰 plt.savefig('t1.svg') 普通保存放大后会有点模糊文件大小20多k plt.savefig('t5.p...

阿豪boy
今天
3
0
java 8 复合Lambda 表达式

comparator 比较器复合 //排序Comparator.comparing(Apple::getWeight);List<Apple> list = Stream.of(new Apple(1, "a"), new Apple(2, "b"), new Apple(3, "c")) .collect(......

Canaan_
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部