在平常开发中,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----递归算法利用的更多相关文章

  1. C# winform treeView checkbox全选反选

    private void treeView2_AfterCheck(object sender, TreeViewEventArgs e)        {            if (e.Acti ...

  2. WPF之复选MVVM TreeView(TreeView+CheckBox)

    需求背景: 当我们用到权限菜单栏时权限菜单栏属于递归效果,我们需要用到TreeView+CheckBox进行组合复选开发时,我们需要解决此类问题时怎么办,那么就引出今天的小笔记内容 实现方式: 下载M ...

  3. JavaScript- 获得TreeView CheckBox里选中项的值

    获得TreeView CheckBox里选中项的值,对JSDOM控制还不是很熟,感觉不太容易.试了很多次终于成功了. 代码如下 <body> <form id="form1 ...

  4. TreeView checkbox

    C# TreeView checkbox 联动打勾 #region 将树的checkbox选中 private void setNodeTrue(Node selNode) { Node node = ...

  5. delphi treeview checkbox

    delphi treeview checkbox 最新版Berlin还没有带checkbox的treeview?

  6. winform treeView 数据绑定

    转载:http://www.jetwu.cn/archives/737 winform treeView 数据绑定 private void Form1_Load(object sender, Eve ...

  7. 关于WinForm TreeView的分享~

    最近在写个测试demo的时候使用到WinForm TreeView,已经好久没接触了,有些生疏,所以还是记录一下遇到的一些问题. 1.如果动态绑定TreeView,这个功能一般会在数据量不确定,需要去 ...

  8. C# winform TreeView中关于checkbox选择的完美类

    public static class TreeViewCheck { /// <summary> /// 系列节点 Checked 属性控制 /// </summary> / ...

  9. C# winform TreeView中关于checkbox选择的完美类[转]

    http://www.cnblogs.com/kingangWang/archive/2011/08/15/2139119.html public static class TreeViewCheck ...

随机推荐

  1. 【转】IOS开发资源汇总

    转自:http://blog.csdn.net/favormm/article/details/6664970 如何用Facebook graphic api上传视频: http://develope ...

  2. 在xib中添加手势控件后运行可能会出现的错误

    如果出现错误: // -[UITapGestureRecognizer superview]: unrecognized selector sent to instance 0x8e407a0 // ...

  3. linux crontab & 每隔10秒执行一次

    linux下定时执行任务的方法  在LINUX中你应该先输入crontab -e,然后就会有个vi编辑界面,再输入0 3 * * 1 /clearigame2内容到里面 :wq 保存退出. 在LINU ...

  4. Entity Framework做IN查询

    开发中遇到的Too high level of nesting for select错误 项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的 ...

  5. Redis-stat的安装与使用

    redis-stat是一个用ruby写成的监控redis的程序,基于info命令获取信息,而不是通过monitor获取信息 一.安装ruby yum install -y ruby ruby-deve ...

  6. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  7. html列表

    有序列表 <ol type="A", start="C"> <!--ordered list--> <li>第一项</ ...

  8. PHP Cannot redeclare class CLassName

    可能导致Cannot redeclare class CLassName错误的原因: 1.在同一个文件中重复声明了两次同名的类: class Extend {} class Extend {} new ...

  9. cnblogs美化及插件

    1.vp计数 http://www.amazingcounters.com 2.来源地图 http://clustrmaps.com 2.1来源地图 http://www.flagcounter.co ...

  10. UI设计实战篇——利用Bootstrap框架制作查询页面的界面

    Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太大).尤其是现在的响应时布局(我的理解是页面根据不同的分辨率,采用不 ...