文档章节

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

清江堤畔
 清江堤畔
发布于 2015/02/15 12:00
字数 879
阅读 6467
收藏 8

    新建一个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
WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/7971771 WinForm开发中针对TreeView控件改变当前选择节点的字体与颜色 在B/S开发...

rdiframework
2012/09/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL autocommit探究

-- sessionA:tx_isolation=REPEATABLE-READmysql> select connection_id();+-----------------+| connection_id() |+-----------------+| 28 |+-----------------+......

安小乐
7分钟前
4
0
c++多线程锁 Mutex  自动判断死锁

c++多线程锁可以使用absl::Mutex std::mutex这两种,下面是demo代码。 使用absl:Mutex的时候打印: [mutex.cc : 1338] RAW: Cycle: [mutex.cc : 1352] RAW: mutex@0x683b68 stack: @ 0x43856......

青黑
25分钟前
1
0
Blockathon2018(成都站)比赛落幕,留给我们这些区块链应用思考

9月14日,HiBlock区块链社区主办的第二届Blockathon在成都菁融国际广场成功举行,30名参赛者分为5支队伍在48小时内完成区块链项目的创意、开发及路演,经过紧张的开发及现场评选,最终币托(...

HiBlock
31分钟前
0
0
71.告警系统主脚本 配置文件 监控项目

20.20 告警系统主脚本(main.sh) 20.21 告警系统配置文件 20.22 告警系统监控项目 20.20 告警系统主脚本(main.sh): ~1.约定:把以后所有的shell脚本放在/usr/local/sbin下,也方便我们查...

王鑫linux
37分钟前
0
0
装饰者模式

装饰者模式 Q:何为装饰模式? ()地给一个对象添加一些额外的(),并且()时,并不影响原对象。扩展功能来说,装饰器模式相比生成子类更为灵活。 Q:使用场景? 1.想要在不影响其他对象的情况下...

阿元
58分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部