帶checkbox的treeview父子節點的聯動選擇

從網上找來,感覺還可以。方便使用。

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown) {
                UpdateCheckStatus(e);
            }
        }

        private void UpdateCheckStatus(TreeViewEventArgs e) {
            CheckAllChildNodes(e.Node);
            UpdateAllParentNodes(e.Node);
        }

        private void UpdateAllParentNodes(TreeNode treeNode) {
            TreeNode parent = treeNode.Parent;
            if (parent != null) {
                if (parent.Checked && !treeNode.Checked) {
                    parent.Checked = false;
                    UpdateAllParentNodes(parent);
                }
                else if (!parent.Checked && treeNode.Checked) {
                    bool all = true;
                    foreach (TreeNode node in parent.Nodes) {
                        if (!node.Checked) {
                            all = false;
                            break;
                        }
                    }
                    if (all) {
                        parent.Checked = true;
                        UpdateAllParentNodes(parent);
                    }
                }
            }
        }

        private void CheckAllChildNodes(TreeNode treeNode) {
            foreach (TreeNode node in treeNode.Nodes) {
                node.Checked = treeNode.Checked;
                if (node.Nodes.Count > 0) {
                    this.CheckAllChildNodes(node);
                }
            }
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章