http://bbs.bccn.net/thread-197567-1-1.html 

/// <summary>
        /// 已选中或取消选中树节点上的复选框时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void depDevTreeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            TreeNode nodeEx = (TreeNode)e.Node;
            if (nodeEx == null) return;

            if (e.Action != TreeViewAction.Unknown)
            {
                SetNodeCheckStatus(nodeEx, nodeEx.Checked);
            }
        }

	/// <summary>
        /// 设置上下级节点的状态
        /// </summary>
        /// <param name="tn">当前点击的节点</param>
        /// <param name="nodeExChecked">选中或取消的状态(true/false)</param>
        private void SetNodeCheckStatus(TreeNode tn, bool nodeExChecked)
        {
            if (tn == null) return;

            // Check children nodes

            foreach (TreeNode tnChild in tn.Nodes)
            {
                tnChild.Checked = nodeExChecked;

                SetNodeCheckStatus(tnChild, nodeExChecked);

            }

            // Set parent check status

            TreeNode tnParent = tn;

            int nNodeCount = 0;

            while (tnParent.Parent != null)
            {

                tnParent = (TreeNode)(tnParent.Parent);

                nNodeCount = 0;

                foreach (TreeNode tnTemp in tnParent.Nodes)

                    if (tnTemp.Checked == nodeExChecked)

                        nNodeCount++;

                if (nNodeCount == tnParent.Nodes.Count)

                    tnParent.Checked = nodeExChecked;

                else

                    tnParent.Checked = false;

            }
        }
 public string checknode = "";
         /// <summary>
        /// 获取所有选中的设备/通道值
        /// </summary>
        /// <param name="treeNodeCollection">节点对象集合</param>
        /// <param name="strAllCheckedDeviceOrChannel">任务详细(对应需检测的设备/通道)</param>
        private void GetAllCheckedDeviceOrChannel(TreeNodeCollection treeNodeCollection)
        {
            foreach (TreeNode tn in treeNodeCollection)
            {

                      if (tn.Checked == true) //通道
                        {
                            checknode += tn.Tag  + ",";
                        }

                if (tn.Nodes.Count > 0)
                {
                    //当存在子节点时,递归调用获取
                    GetAllCheckedDeviceOrChannel(tn.Nodes);
                }
            }
        }

  

==========2014-04-24=========winform树控件勾选方法 和获取所有选中的的更多相关文章

  1. 陈年佳酿之 - Winform ListView 控件 double click 事件中获取选中的row与column

    背景 最近收到了一个关于以前项目的维护请求,那时的楼主还是刚刚工作的小青年~~~ 项目之前使用的是.net/winform.今天重新打开代码,看着之前在FrameWork2.0下面的代码, 满满的回忆 ...

  2. Qt实现表格树控件-自绘树节点虚线

    目录 一.开心一刻 二.自绘树节点? 三.效果展示 四.实现思路 1.可扩展接口 2.函数重写 3.同步左侧表头 五.相关文章 原文链接:Qt实现表格树控件-自绘树节点虚线 一.开心一刻 一程序员第一 ...

  3. PyQt5复杂控件(树控件、选项卡控件(滚动条控件、多文档控件、停靠控件)

    1.树控件的基本使用方法QTreeWidget'''QTreeWidget树控件的使用方法添加图标,添加表格,添加复选框等'''from PyQt5.QtWidgets import *from Py ...

  4. 基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

    最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...

  5. 使用EasyUI的树控件构建Web界面

    最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...

  6. DevExpress Winform 常用控件

    Ø  前言 DevExpress 控件的功能比较强大,是全球知名控件开发公司,对于开发 B/S 或 C/S 都非常出色,可以实现很炫且功能强大的效果. DevExpress Winform 常用控件是 ...

  7. (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面

    http://www.cnblogs.com/wuhuacong/p/3669575.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...

  8. 在DevExpress程序中使用Winform分页控件直接录入数据并保存

    一般情况下,我们都倾向于使用一个组织比较好的独立界面来录入或者展示相关的数据,这样处理比较规范,也方便显示比较复杂的数据.不过在一些情况下,我们也可能需要直接在GridView表格上直接录入或者修改数 ...

  9. Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)

    利用午休时间继续把过去写的一些代码翻出来说一说,文章可能写的比较简略,但是我会努力把核心意思表达清楚,具体代码可直接访问 Github 获取. Github 地址:https://github.com ...

随机推荐

  1. maven 父工程 消除重复 对子模块进行管理 主要继承依赖

     子类继承父类的 可以不需要groupid与versionid

  2. MyBatis学习(七)MyBatis关联映射之多对多映射

    对于数据库中的多对多关系建议使用一个中间表来维护关系. 1.创建四张表,分别为用户表,商品表,订单表,中间表. DROP TABLE IF EXISTS `t_user`; CREATE TABLE ...

  3. BZOJ4229选择——LCT+并查集+离线(LCT动态维护边双连通分量)

    题目描述 现在,我想知道自己是否还有选择. 给定n个点m条边的无向图以及顺序发生的q个事件. 每个事件都属于下面两种之一: 1.删除某一条图上仍存在的边 2.询问是否存在两条边不相交的路径可以从点u出 ...

  4. BZOJ4372 烁烁的游戏(动态点分治+线段树)

    建出点分树,每个节点维护其作为点分树上lca对子树内点的贡献,线段树维护即可,同时另开一个线段树以减掉父亲重复的贡献. #include<iostream> #include<cst ...

  5. share.js轻松分享/邀请

    GitHub地址 https://github.com/overtrue/share.js 安装 安装的方法很多,大家选择自己合适的进行安装就好. clone $ git clone https:// ...

  6. 【转】用emWin进度条控件做个表盘控件,效果不错

    @2018-08-09 用emWin进度条控件做个表盘控件,效果不错

  7. poj1236/luogu2746 Network of Schools (tarjan)

    tarjan缩点后,第一问答案显然是入度为零的点得个数第二问:考虑到 没有入度或出度为0的点 的图强连通, 所以答案就是max{入度为零的个数,出度为零的个数} (把出度为零的连到入度为零的点,然后剩 ...

  8. IntelliJ IDEA的使用操作链接

    一:IntelliJ IDEA导入多个eclipse项目到同一个workspace下: http://www.cnblogs.com/ThinkVenus/p/6783961.html?utm_sou ...

  9. Python基础学习(四)

    菜鸟咀嚼python基础之继续. 一.返回函数 第三章已经简单操作了Python的高阶函数,目前继续练手函数作为返回值的特效:通常,高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. 案 ...

  10. 代替C++的getchar()

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in =n ...