要求如下:
1、判断同级节点是否全部选中,从第一个节点开始
2、判断同级节点是否全未选中,从第一个节点开始
3、如果该节点选中,则其子节点全部选中,反之亦然
4、如过该节点选中,则其父节点依次选中5、如果该节点没有选中,且同级节点全未选中,则取消父节点
#region 判断同级节点是否全部选中,从第一个节点开始
private bool IsAllChecked(TreeNode tn)
{
if (!tn.Checked)
{
return false;
}
if (tn.NextNode == null)
{
return true;
}
return IsAllChecked(tn.NextNode);
}
#endregion
#region 判断同级节点是否全未选中,从第一个节点开始
private bool IsAllUnChecked(TreeNode tn)
{
if (tn.Checked)
{
return false;
}
if (tn.NextNode == null)
{
return true;
}
return IsAllUnChecked(tn.NextNode);
}
#endregion
#region 如果该节点选中,则其子节点全部选中,反之亦然
private void CheckAllChildNodes(TreeNode tn, bool Checked)
{
foreach (TreeNode tnChild in tn.Nodes)
{
tnChild.Checked = Checked;
if (tnChild.Nodes.Count > 0)
{
CheckAllChildNodes(tnChild, Checked);
}
}
}
#endregion
#region 如过该节点选中,则其父节点依次选中
private void SelectParent(TreeNode tn)
{
if (tn.Parent != null && !tn.Parent.Checked)
{
tn.Parent.Checked = true;
if (tn.Parent.Parent != null)
{
SelectParent(tn.Parent);
}
}
}
#endregion
#region 如果该节点没有选中,且同级节点全未选中,则取消父节点
private void CancelParent(TreeNode tn)
{
if (tn.Parent != null)
{
bool isCheck = false;
foreach (TreeNode n in tn.Parent.Nodes)
{
if (n.Checked == true)
{
isCheck = true;
break;
}
}
if (!isCheck)
{
tn.Parent.Checked = false;
CancelParent(tn.Parent);
}
}
}
#endregion