博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
winform treeview 复选框,父节点子节点联动Bug
阅读量:4495 次
发布时间:2019-06-08

本文共 2242 字,大约阅读时间需要 7 分钟。

这是Vista和Win7的Bug

有个屏蔽双击的解决方法(不完美,无法双击折叠展开节点了):

using System;using System.Windows.Forms;public class MyTreeView : TreeView {  protected override void WndProc(ref Message m) {    // Suppress WM_LBUTTONDBLCLK    if (m.Msg == 0x203) { m.Result = IntPtr.Zero; }    else base.WndProc(ref m);  }}
public static class TreeViewCheck    {        ///         /// 系列节点 Checked 属性控制        ///         ///         public static void CheckControl(TreeViewEventArgs e)        {            if (e.Action != TreeViewAction.Unknown)            {                if (e.Node != null && !Convert.IsDBNull(e.Node))                {                    CheckParentNode(e.Node);                    if (e.Node.Nodes.Count > 0)                    {                        CheckAllChildNodes(e.Node, e.Node.Checked);                    }                }            }        }        #region 私有方法        //改变所有子节点的状态        private static void CheckAllChildNodes(TreeNode pn, bool IsChecked)        {            foreach (TreeNode tn in pn.Nodes)            {                tn.Checked = IsChecked;                if (tn.Nodes.Count > 0)                {                    CheckAllChildNodes(tn, IsChecked);                }            }        }        //改变父节点的选中状态,此处为所有子节点不选中时才取消父节点选中,可以根据需要修改        private static void CheckParentNode(TreeNode curNode)        {            bool bChecked = false;            if (curNode.Parent != null)            {                foreach (TreeNode node in curNode.Parent.Nodes)                {                    if (node.Checked)                    {                        bChecked = true;                        break;                    }                }                if (bChecked)                {                    curNode.Parent.Checked = true;                    CheckParentNode(curNode.Parent);                }                else                {                    curNode.Parent.Checked = false;                    CheckParentNode(curNode.Parent);                }            }        }        #endregion    }
TreeViewCheck(操作类)

使用方法

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)  {     TreeViewCheck.CheckControl(e);  }

参考:

转载于:https://www.cnblogs.com/idoudou/archive/2012/04/19/3144423.html

你可能感兴趣的文章
周总结<7>
查看>>
C#编码习惯谈
查看>>
给animator动态添加事件
查看>>
Codeu_576_问题 D: 查找
查看>>
异步编程(二)基于事件的异步编程模式 (EAP)
查看>>
C# 添加,修改,删除Xml节点
查看>>
【转载】互联网知名博客收揽
查看>>
BZOJ1552: [Cerc2007]robotic sort
查看>>
Confirm the Ending--freecodecamp算法题目
查看>>
用UIScrollView做一个支持两点触控缩放图片
查看>>
零基础学python之入门和列表数据(附详细的代码解释和执行结果截图)
查看>>
float浮点数的四舍五入
查看>>
QQ消息记录、接收文件、图片、拍照照片等保存位置
查看>>
SimpleXML 使用详细例子
查看>>
1.17
查看>>
7.16
查看>>
storyBoard中的Segue跳转
查看>>
Sliding animation on Nav Menu in mvc 4 application
查看>>
TeamViewer下载地址
查看>>
8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署...
查看>>