treeview子节点关联父节点

aligu528 2011-11-11 02:43:05
在winform下 treeview 控件,是复选框,
子节点选中了,相应的父节点要怎么选中?

子节点关联父节点

求解,求源码?
...全文
152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jacikafx 2011-11-11
  • 打赏
  • 举报
回复
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
CheckControl(e);

}
public void CheckControl(TreeViewEventArgs e)
{
if (e.Action != TreeViewAction.Unknown)
{
if (e.Node != null && !Convert.IsDBNull(e.Node))
{
CheckParentNode(e.Node);
if (e.Node.Nodes.Count > 0)
{
CheckAllChildNodes(e.Node, e.Node.Checked);
}
}

}
}
private void CheckAllChildNodes(TreeNode treeNode, bool p)
{
foreach (TreeNode tn in treeNode.Nodes)
{
tn.Checked = p;
if (tn.Nodes.Count > 0)
{
CheckAllChildNodes(tn, p);
}
}
}

private void CheckParentNode(TreeNode treeNode)
{
bool bChecked = false;
if (treeNode.Parent != null)
{
foreach (TreeNode node in treeNode.Parent.Nodes)
{
if (node.Checked)
{
bChecked = true;
break;
}
}
if (bChecked)
{
treeNode.Parent.Checked = true;
CheckParentNode(treeNode.Parent);
}
else
{
treeNode.Parent.Checked = false;
CheckParentNode(treeNode.Parent);
}
}
}
MKing0412 2011-11-11
  • 打赏
  • 举报
回复
子节点只要有一个选中对应的父节点就选中不?
父节点选中,所有的子节点有变化没?
相应的父节点这样选中:

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
TreeNode tNode = e.Node.Parent;
if (tNode!=null)
{
tNode.Checked = true;
}
}

像楼上大神说的一样,用递归逐层处理。
bdmh 2011-11-11
  • 打赏
  • 举报
回复
递归parent
dongxiao0517 2011-11-11
  • 打赏
  • 举报
回复
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (updateTreeNode) return; // 如果在刷新中
updateTreeNode = true;
try
{
TreeNodeCheck(e.Node, e.Node.Checked);
}
finally
{
updateTreeNode = false;
}
}
private void TreeNodeCheck(TreeNode ATreeNode, bool AChecked)
{
if (ATreeNode == null) return;
ATreeNode.Checked = AChecked;
if (AChecked) // 如果选中本节点这就是选中全部上级节点
{
TreeNodeCheck(ATreeNode.Parent, AChecked);
}
else
{
if (ATreeNode.Parent != null && ATreeNode.Parent.Checked)
{
foreach (TreeNode vTreeNode in ATreeNode.Parent.Nodes)
{
if (vTreeNode.Checked)
{
return;
}
}
TreeNodeCheck(ATreeNode.Parent, AChecked); // 判断是否所有的兄弟节点Checked都为false
}
}
}
这一个挺好用的

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧