效果如图:。选择有子节点的节点时会选择其下所有节点。取消一个子节点的选择状态,其父节点的选择状态也取消。
代码如下:
private void departTView_AfterCheck(object sender, TreeViewEventArgs e)
{
try
{
if(e.Action!=TreeViewAction.Unknown)
{
CheckAllChildNOdes(e.Node);
UpdateAllParentNodes(e.Node);
}
}
catch(Exception ex)
{
}
}
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);
}
}
}