关于WinForm TreeView的分享~
最近在写个测试demo的时候使用到WinForm TreeView,已经好久没接触了,有些生疏,所以还是记录一下遇到的一些问题。
1、如果动态绑定TreeView,这个功能一般会在数据量不确定,需要去数据库或者其他途径获得数据,动态加载数据的时候使用。
下面我们看一下怎么实现动态版定,首先准备好数据,我这里就模拟一下,定义两个数组
//定义值
string[] strs = { "香蕉", "苹果", "桃子", "草莓" };
string[] strs2 = { "红苹果", "青苹果" };//这个数组表示苹果的子项
2、下面定义两个方法,添加父节点和添加字节点的方法,这个例子比较简单,各位可以根据你们自己的需要修改代码。递归添加子节点的时候我只添加父节点下的子节点,其他节点暂时不添加,所以用到if (num == 2) ,因为苹果是第二项,所以从2开始添加子节点
//添加父节点的方法
private void BindRoot(string[] strs, string[] strs2)
{
int i = ;
foreach (var item in strs)
{ TreeNode rootNode = new TreeNode();
rootNode.Tag = i;
rootNode.Text = item;
tvData.Nodes.Add(rootNode);
BindChildAreas(rootNode, strs2);//调用添加子节点的方法
i++;
}
} //添加子节点的方法,递归绑定子项
private void BindChildAreas(TreeNode fNode, string[] strs2)
{
int k = ;
int num=int.Parse(fNode.Tag.ToString());//父节点数据关联的数据行
if (num==) //递归终止,区域不包含子区域时
{
return;
}
if (num == ) // 当项为2时开始添加子项
{
foreach (var item2 in strs2)
{
TreeNode node = new TreeNode();
node.Tag = k;
node.Text =item2;
//添加子节点
fNode.Nodes.Add(node);
k++;
}
} }
3、初始化该TreeView,调用添加根节点方法BindRoot(参数1,参数2);
//直接调用,赋参数值,即第一点定义的数组
BindRoot(strs, strs2);//绑定tvData
4、接下来可以根据个人需求,展开节点,这里我演示一个展开TreeView所有节点的方法
//默认展开所有节点
for (int i = tvData.GetNodeCount(false) - ; i > -; i--)
{
tvData.SelectedNode = tvData.Nodes[i];
tvData.SelectedNode.ExpandAll();
}
5、接下来我们看一下效果

6、到这里已经完成了TreeView的显示功能,但是其实最重要的还是在后头,咱们不能让它中看不中用,所以下面我们要通过点击获得他的值,由于我很久没有用这个控件了,凭记忆想到的就是使用this.tvData.SelectedNode.Text获得选中的值。
但是这里有一个问题,无论我使用TreeView哪个事件都不能准确的获得选中的值,不管是click点击事件,还是mouseclick事件,点击获得的值都是上次点击事件的值,反正得到的值都不是正确的,查了网上很多文章,七七八八的试了很多方法还是有问题。
那么应该怎么办呢,几经波折找到了一个方法,供参考,通过tvData_AfterSelect事件的(TreeNode)e.Node可以获得选中节点,而且不会出错,试过很多次,基本没问题,这个方法还是有一点小问题,就是初始化时会赋值(TreeNode)e.Node为根节点的所有值,但是不影响使用。
private void tvData_AfterSelect(object sender, TreeViewEventArgs e)
{
SetNodeCheckState((TreeNode)e.Node);
string SelectData = ((TreeNode)e.Node).Text;//获得选中值
}
//设置选中值的状态
private void SetNodeCheckState(TreeNode parentNode)
{
foreach (TreeNode node in parentNode.Nodes)
{
if (parentNode.Checked == true)
node.Checked = true;
else
node.Checked = false;
if(node.Nodes.Count>)
SetNodeCheckState(node);
}
}
ok,今天关于WinForm TreeView的分享就到这里了,如果有什么问题的欢迎提出,感谢!
关于WinForm TreeView的分享~的更多相关文章
- winform treeView 数据绑定
转载:http://www.jetwu.cn/archives/737 winform treeView 数据绑定 private void Form1_Load(object sender, Eve ...
- Winform TreeView 查找下一个节点
转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html public static class TreeViewHelper { ...
- winform Treeview控件使用
做角色菜单权限时用到treeview控件做树状显示菜单,简单总结了一下用法: 1.在winform窗体中拖入treeview控件,注意修改属性CheckBoxes属性为true,即在节点旁显示复选框 ...
- winform TreeView的一些用法以及异步加载
今天,主要弄了一下对于树型控件的一些方法,以及异步加载.参考: http://www.cnblogs.com/greatverve/archive/2012/03/23/winform-treevie ...
- C# Winform TreeView 的一些基本用法
下面是treeview的用法TreeView组件是由多个类来定义的,TreeView组件是由命名空间"System.Windows .Forms"中的"TreeView& ...
- C# winform TreeView中关于checkbox选择的完美类
public static class TreeViewCheck { /// <summary> /// 系列节点 Checked 属性控制 /// </summary> / ...
- c# winform TreeView NODE(节点) 重命名或获取节点修改后的值
在程序开发过程中我们经常用到treeview,还经常要修改节点的名字.节点名字修改后还想及时更新数据库.这时问题就来了,怎样获取NODE(节点)更新后的值呢?本人试了很多方法最终分析出treeview ...
- [转]C# WinForm treeview checkbox----递归算法利用
在平常开发中,treeview的节点显示checkbox,若节点存在几级时,往往希望,选中父节点后,其子节点都要选中,如何实现勒,请看 using System; using System.Colle ...
- Winform TreeView 节点拖动
private void treeView_ItemDrag(object sender, ItemDragEventArgs e) { TreeNode dragNode = e.Item as T ...
随机推荐
- SQL奇技淫巧(01):给查出的数据排序编个号【row_number() over(order by c)】(mysql,db2,oracle,sqlserver通用)
我们天天都在跟数据库打交道,写下的代码不计其数,写下的SQL更是可以绕地球几圈.这里收集关于SQL的神奇语法及用法,虽然你可能没有用过,但这些SQL却可以在关键的时候,派上用场. 我对SQL语句的理解 ...
- 关于ionic app $http.get()无法请求,导致页面没有数据的问题
ionic app 打包后在真机上运行,无法用正常使用http.get(),这种情况被称为“白名单”,解决方法:切换到项目根目录,执行命令:cordova plugin add cordova-plu ...
- gin-jwt对API进行权限控制
前言 之前文章简单介绍了如何运行gin+vue的前后端分离开源项目,该项目是学习了Gin实践教程后结合vue-element-admin写的,该教程讲得很详细,适合入门Gin.本篇文章将介绍gin+v ...
- xsd to javabean
1. cd jdk/bin 2. xjc -p com.skyecho.product.air.ibe.api.model.airfaredisplay d:/temp/OTA_AirFareDisp ...
- POJ 3207 Ikki's Story IV - Panda's Trick 2-sat模板题
题意: 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边,比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接.给你的信息中,每个点最多只会连接的一条边.问能不能连接这m条边,使这 ...
- 背包形动态规划 fjutoj2375 金明的预算方案
金明的预算方案 TimeLimit:1000MS MemoryLimit:128MB 64-bit integer IO format:%lld Problem Description 金明今天 ...
- codeforces 284 E. Coin Troubles(背包+思维)
题目链接:http://codeforces.com/contest/284/problem/E 题意:n种类型的硬币,硬币的面值可能相同,现在要在满足一些限制条件下求出,用这些硬币构成t面值的方案数 ...
- eql框架。
在刚进入公司的时候,在service层的框架用的是eql,是公司内的大佬封装的,作为一个小白,真的是折磨.公司内没有任何的文档,只能靠着自己一步一步的摸索. 后来用习惯了,发现这个框架确实有自己的独到 ...
- 基于.net EF6 MVC5+WEB Api 的Web系统框架总结(3)-项目依赖注入
简介 依赖注入主要是一种结构性的模式,注重的是类与类之间的结构,它要达到的目的就是设计原则中最少知道和合成复用的原则,减少内部依赖,履行单一职责,最终就是强解耦.依赖注入目前最好的实现就是依赖注入容器 ...
- requests + BeautifulSoup + json
requests: response.text 以 unicode 格式显示响应的文本 response.content 以 二进制 格式显示响应的文本 BeautiSoup: sou ...