从网上找来,感觉还可以。方便使用。
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);
}
}
}