关于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 ...
随机推荐
- nuget cli常用命令简介
起因:使用nuget,但是部分同事用的mac,不能用vs的包管理器查看私有nuget库里面的包,所以,就总结了几个常用的 nuget cli 命令,方便全平台使用nuget 废话不多,直入主题 准备: ...
- 记录一下vue transition 过渡各状态()
.slide-fade-enter{ opacity: 0; transform: translateX(100px); /*从哪里开始过渡:在过渡之前我就把位置定义在100px的位置,并 ...
- Tesseract:简单的Java光学字符识别
1.1 介绍 开发具有一定价值的符号是人类特有的特征.对于人们来说识别这些符号和理解图片上的文字是非常正常的事情.与计算机那样去抓取文字不同,我们完全是基于视觉的本能去阅读它们. 另一方面,计算机的工 ...
- 用故事解析setTimeout和setInterval(内含js单线程和任务队列)
区别: setTimeout(fn,t): 延迟调用,超过了时间就调用回调函数,返回一个id,使用clearTimeout(id)取消执行. 注意:取消了里面的回调函数就不执行了哦,而不是取消的时候就 ...
- Java 复制PPT幻灯片
本篇文章将介绍通过java程序原样复制PPT幻灯片的方法.这里分两种情况来复制,即 在同一幻灯片文档中复制 在不同幻灯片文档间复制 使用工具:Free Spire.Presentation for J ...
- RestTemplate 1
@Inject private RestTemplate restTemplate; @SuppressWarnings("unchecked") public Use ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- CF #535 (Div. 3) E2 Array and Segments (Hard version) 利用线段树进行区间转移
传送门 题意: 有m个区间,n个a[ i ] , 选择若干个区间,使得整个数组中的最大值和最小值的差值最小.n<=1e5,m<=300; 思路: 可以知道每个i,如果一个区间包含这个 ...
- HDU-2018多校7th-1011-Swordsman 附杜教fread代码
HDU-6396 题意: 背景是打怪升级的故事,有k个不同属性的初始的能力值,每只怪物也有相同个数的能力值,你只能放倒k个能力值都比怪物大的,每放倒一个怪物,都可以得到相应的k个能力值. 思路: 根据 ...
- D-query
SPOJ - DQUERY 题意 求区间内出现一共有几种数字. 上次写了一个主席树,这次用一下莫队,莫队是离线询问的一种操作,将询问分块,如果在同一个块内就按照右端点排序,如果不在同一个块内就按照块的 ...