treeview 節點 父節點 遞歸
//取消節點選中狀態之後,取消所有父節點的選中狀態
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent;
parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
//選中節點之後,選中節點的所有子節點
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Checked)
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, true);
}
else
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, false);
//如果節點存在父節點,取消父節點的選中狀態
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
private void setParentNodeCheckedState(TreeNode currNode, bool state)
{
TreeNode parentNode = currNode.Parent;
parentNode.Checked = state;
if (currNode.Parent.Parent != null)
{
setParentNodeCheckedState(currNode.Parent, state);
}
}
//選中節點之後,選中節點的所有子節點
private void setChildNodeCheckedState(TreeNode currNode, bool state)
{
TreeNodeCollection nodes = currNode.Nodes;
if (nodes.Count > 0)
foreach (TreeNode tn in nodes)
{
tn.Checked = state;
setChildNodeCheckedState(tn, state);
}
}
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
if (e.Node.Checked)
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, true);
}
else
{
//取消節點選中狀態之後,取消所有父節點的選中狀態
setChildNodeCheckedState(e.Node, false);
//如果節點存在父節點,取消父節點的選中狀態
if (e.Node.Parent != null)
{
setParentNodeCheckedState(e.Node, false);
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.