2013-04-30 21 views
2

所有子节点我使用的TreeView,我用这个代码的形式检查,未经检查的所有子节点时选中只在树状

private bool updatingTreeView; 
private void CheckChildren_ParentSelected(TreeNode node, Boolean isChecked) 
{ 
    foreach (TreeNode item in node.Nodes) 
    { 
     item.Checked = isChecked; 

     if (item.Nodes.Count > 0) 
     { 
      this.CheckChildren_ParentSelected(item, isChecked); 
     } 
    } 
} 
private void SelectParents(TreeNode node, Boolean isChecked) 
{ 
    //MessageBox.Show(node.Parent.ToString()); 
    if (node.Parent != null) 
    { 
     node.Parent.Checked = isChecked; 
     SelectParents(node.Parent, isChecked); 
    } 
} 
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) 
{ 
    if (updatingTreeView) return; 
    updatingTreeView = true; 
    CheckChildren_ParentSelected(e.Node, e.Node.Checked); 
    SelectParents(e.Node, e.Node.Checked); 
    updatingTreeView = false; 
} 

但现在

这里选择父母或子女节点问题:

当我未选中的子节点我只想取消选中树视图中的所有childnode。

喜欢这幅画:

nchecked all childnode

但是我的代码的所有父母和孩子(两个)处于未选中状态!

所以现在我想知道我怎么能只未选中树视图中的所有子节点,

现在如何改变这种代码解决这个问题?

亲切的问候。

+0

在你的榜样你会怎么过取消选中节点6?似乎如果你只清除根节点,你将永远无法清除根目录 – timmy 2013-04-30 21:19:16

+0

@timmy:我不知道我可以用我的代码或现在,但我知道这是可能的:D所以你有对我有什么想法? :( – Sam 2013-04-30 21:36:08

+0

对我来说,它看起来像SelectParents递归地取消所有paretnts,直到node.Parent为空。 – Zilog 2013-04-30 23:02:33

回答

1

“当我未选中的子节点,我只想取消选中树视图中的所有子节点。”

换句话说,你不想取消选中父节点?

在这种情况下,只有当选择一个节点调用SelectParents():

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e) 
{ 
    if (updatingTreeView) return; 
    updatingTreeView = true; 
    CheckChildren_ParentSelected(e.Node, e.Node.Checked); 
    if (e.Node.Checked) 
    { 
     SelectParents(e.Node, e.Node.Checked); 
    } 
    updatingTreeView = false; 
}