请问:有什么方法能让父级选中时,所有该父级的子级全部被选中,只要选中一个子级时,该子级的所有父级全部被选中,就像杀毒软件选择杀毒目标那样

解决方案 »

  1.   

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                treeView1.CheckBoxes = true;
            }        private void Form1_Load(object sender, EventArgs e)
            {
                TreeNode root = treeView1.Nodes.Add("父");
                root.Nodes.Add("子");
                root.Nodes.Add("子");
                root.Nodes.Add("子");            treeView1.NodeMouseClick += new TreeNodeMouseClickEventHandler(treeView1_NodeMouseClick);
            }        void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
            {
                foreach (TreeNode node in e.Node.Nodes)
                {
                    node.Checked = e.Node.Checked;
                }
            }
        }
      

  2.   

            #region TreeView树中Checked属性改变时,处理数据和以下级别节点的选择属性
            private void treeViewEx1_AfterCheck(object sender, TreeViewEventArgs e)
            {
                roleAfterCheck(e);
            }        //处理角色新增和修改数据
            private void roleAfterCheck(TreeViewEventArgs e)
            {
                object[] key = new object[4];
                int nodeType = 1;
                DataRow foundRow;            nodeType = ((RoleTreeNode)e.Node).NodeType;
                if (nodeType == 3)
                {
                    key[0] = this.accountCode;
                    key[1] = this.roleCode;
                    key[2] = ((RoleTreeNode)e.Node).ModuleCode.ToString().Trim();
                    key[3] = ((RoleTreeNode)e.Node).OprCode.ToString().Trim();
                }            if (e.Node.Checked == true)
                {
                    if (nodeType == 3 && this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key) == null)
                    {
                        foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.NewRow();
                        foundRow["AccountCode"] = key[0];
                        foundRow["RoleCode"] = key[1];
                        foundRow["ModuleCode"] = key[2];
                        foundRow["OprCode"] = key[3];
                        this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Add(foundRow);
                    }
                    if (e.Node.Parent != null)
                        e.Node.Parent.Checked = true;                bool isNodesChecked = false;
                    foreach (TreeNode n in e.Node.Nodes)
                    {
                        if (n.Checked == true)
                        {
                            isNodesChecked = true;
                            break;
                        }
                    }
                    if (!isNodesChecked)
                        treeNodeCheck(e.Node, e.Node.Checked);
                }
                else
                {
                    if (nodeType == 3)
                    {
                        foundRow = this.dataSetRoleDataHelper2.AdmRoleRight.Rows.Find(key);
                        if (foundRow != null)
                            foundRow.Delete();
                    }
                    treeNodeCheck(e.Node, e.Node.Checked);
                }
            }        private void treeNodeCheck(TreeNode node, bool check)
            {
                foreach (TreeNode n in node.Nodes)
                {
                    if (n.Checked != check)
                        n.Checked = check;
                    treeNodeCheck(n, check);
                }
            }
            #endregion