C#中TreeView選中父節點同時選中所有的子節點


TreeView 通常和CheckBoxs一起使用,顯示並選擇一些條目,特別是在等級分割的狀態下,例如 

 

當我選擇一個父節點,希望該父節點下所有的子節點都被選中,取消一個節點,希望他所有的父節點都取消,例如 

 

選擇選中父節點同時選中所有的子節點

//取消節點選中狀態之后,取消所有父節點的選中狀態
        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 treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action == TreeViewAction.ByMouse)
            {
                textBox1.Text = e.Node.Text;
                if (e.Node.Checked == true)
                {
                    //選中節點之后,選中該節點所有的子節點
                    setChildNodeCheckedState(e.Node, true);
                }
                else if(e.Node.Checked == false)
                {
                    //取消節點選中狀態之后,取消該節點所有子節點選中狀態
                    setChildNodeCheckedState(e.Node, false);
                    //如果節點存在父節點,取消父節點的選中狀態
                    if (e.Node.Parent != null)
                    {
                        setParentNodeCheckedState(e.Node, false);
                    }
                }
            } 
        }

 

Ps:
獲取所有的選中的節點代碼
     //獲取所有的選中的節點代碼
        private void GetSelectedList(TreeNode node)
        {
            foreach (TreeNode childNode in node.Nodes)
            {
                if (childNode.Checked)
                {
                    string[] aa = new string[2];
                    aa[0] = childNode.Tag.ToString().Trim();
                    aa[1] = childNode.Text.ToString().Trim();
                    SelectedDwCode.Add(aa);
                }
                else
                {
                    if (childNode.Nodes.Count > 0)
                        GetSelectedList(childNode);
                }
            }
        }    

  List<string[]>() SelectedDwCode= new List<string[]>();
  private void btnOK_Click(object sender, EventArgs e)
        {

                if (treeView1.Nodes.Count > 0)
                {
                    TreeNode aa = treeView1.Nodes[0];
                    GetSelectedList(aa);

                    if (SelectedDwCode.Count == 0)
                    {
                        MessageBox.Show(this, "請選擇一個節點!","提示");
                        return;
                    }
                }    
          }

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM