[转]C# WinForm treeview checkbox----递归算法利用
在平常开发中,treeview的节点显示checkbox,若节点存在几级时,往往希望,选中父节点后,其子节点都要选中,如何实现勒,请看
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms; namespace SmartHome
{
public partial class TreeViewAndCheckbox : Form
{
public TreeViewAndCheckbox()
{
InitializeComponent();
//treeview显示checkbox
treeView1.CheckBoxes = true;
TreeViewUtil.ShowTreeViewInfo(treeView1);
this.treeView1.AfterCheck += new TreeViewEventHandler(treeView1_AfterCheck); } private void TreeViewAndCheckbox_Load(object sender, EventArgs e)
{
treeView1.ExpandAll();
} private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{ if (e.Action == TreeViewAction.ByMouse)
{
textBox1.Text = e.Node.Text;
if (e.Node.Checked)
{
//取消节点选中状态之后,取消所有父节点的选中状态
setChildNodeCheckedState(e.Node, true); }
else
{
//取消节点选中状态之后,取消所有父节点的选中状态
setChildNodeCheckedState(e.Node, false);
//如果节点存在父节点,取消父节点的选中状态
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
}
//取消节点选中状态之后,取消所有父节点的选中状态
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent; parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
//选中节点之后,选中节点的所有子节点
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{ tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
} private void button1_Click(object sender, EventArgs e)
{
int i = 0;
foreach (TreeNode tn in treeView1.Nodes)
{
if (tn.Checked)
i++;
foreach (TreeNode item in tn.Nodes)
{
if (item.Checked)
{
i++;
}
foreach (TreeNode nd in item.Nodes)
{
if (nd.Checked)
{
i++;
} } }
textBox2.Text = i.ToString(); } } /// <summary>
/// 查询treeNode节点下有多少节点被选中(递归实现,不受级数限制)
/// </summary>
/// <param name="tv"></param>
/// <returns></returns>
private int GetNodeChecked(TreeNode tv)
{
int x = 0;
if (tv.Checked)
{
x++;
}
foreach (TreeNode item in tv.Nodes)
{
x+= GetNodeChecked(item); }
return x; } /// <summary>
/// 查询TreeView下节点被checked的数目
/// </summary>
/// <param name="treev"></param>
/// <returns></returns>
private int GetTreeViewNodeChecked(TreeView treev)
{
int k = 0;
foreach (TreeNode item in treev.Nodes)
{
k += GetNodeChecked(item);
}
return k;
} private void button2_Click(object sender, EventArgs e)
{ textBox2.Text = GetTreeViewNodeChecked(treeView1).ToString();
} }
} 引文连接:http://www.cnblogs.com/ITBread/archive/2012/03/16/2399581.html
[转]C# WinForm treeview checkbox----递归算法利用的更多相关文章
- C# winform treeView checkbox全选反选
private void treeView2_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Acti ...
- WPF之复选MVVM TreeView(TreeView+CheckBox)
需求背景: 当我们用到权限菜单栏时权限菜单栏属于递归效果,我们需要用到TreeView+CheckBox进行组合复选开发时,我们需要解决此类问题时怎么办,那么就引出今天的小笔记内容 实现方式: 下载M ...
- JavaScript- 获得TreeView CheckBox里选中项的值
获得TreeView CheckBox里选中项的值,对JSDOM控制还不是很熟,感觉不太容易.试了很多次终于成功了. 代码如下 <body> <form id="form1 ...
- TreeView checkbox
C# TreeView checkbox 联动打勾 #region 将树的checkbox选中 private void setNodeTrue(Node selNode) { Node node = ...
- delphi treeview checkbox
delphi treeview checkbox 最新版Berlin还没有带checkbox的treeview?
- winform treeView 数据绑定
转载:http://www.jetwu.cn/archives/737 winform treeView 数据绑定 private void Form1_Load(object sender, Eve ...
- 关于WinForm TreeView的分享~
最近在写个测试demo的时候使用到WinForm TreeView,已经好久没接触了,有些生疏,所以还是记录一下遇到的一些问题. 1.如果动态绑定TreeView,这个功能一般会在数据量不确定,需要去 ...
- C# winform TreeView中关于checkbox选择的完美类
public static class TreeViewCheck { /// <summary> /// 系列节点 Checked 属性控制 /// </summary> / ...
- C# winform TreeView中关于checkbox选择的完美类[转]
http://www.cnblogs.com/kingangWang/archive/2011/08/15/2139119.html public static class TreeViewCheck ...
随机推荐
- 【转】IOS开发资源汇总
转自:http://blog.csdn.net/favormm/article/details/6664970 如何用Facebook graphic api上传视频: http://develope ...
- 在xib中添加手势控件后运行可能会出现的错误
如果出现错误: // -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x8e407a0 // ...
- linux crontab & 每隔10秒执行一次
linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...
- Entity Framework做IN查询
开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...
- Redis-stat的安装与使用
redis-stat是一个用ruby写成的监控redis的程序,基于info命令获取信息,而不是通过monitor获取信息 一.安装ruby yum install -y ruby ruby-deve ...
- 解读Python发送邮件
解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...
- html列表
有序列表 <ol type="A", start="C"> <!--ordered list--> <li>第一项</ ...
- PHP Cannot redeclare class CLassName
可能导致Cannot redeclare class CLassName错误的原因: 1.在同一个文件中重复声明了两次同名的类: class Extend {} class Extend {} new ...
- cnblogs美化及插件
1.vp计数 http://www.amazingcounters.com 2.来源地图 http://clustrmaps.com 2.1来源地图 http://www.flagcounter.co ...
- UI设计实战篇——利用Bootstrap框架制作查询页面的界面
Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太大).尤其是现在的响应时布局(我的理解是页面根据不同的分辨率,采用不 ...