C#中treeview中父节点和子节点的互选问题

boxerwg 2009-02-07 02:32:14
c# winForm
TreeView中父节点的CheckBox被点击 则其下的所有子节点也被选中

子节点只要有一个选择 父节点也被选择上

子节点没有一个被选择 父节点就取消选择

...全文
231 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
googlg 2012-08-09
  • 打赏
  • 举报
回复

SeleNode.Nodes.Count == 0[Quote=引用 4 楼 的回复:]

顺便请教如何判断TreeView选中的节点是最末级的,就是没有子节点的那种?
[/Quote]
whowhen21 2009-02-07
  • 打赏
  • 举报
回复
顺便请教如何判断TreeView选中的节点是最末级的,就是没有子节点的那种?
boxerwg 2009-02-07
  • 打赏
  • 举报
回复
多谢zgke
zgke 2009-02-07
  • 打赏
  • 举报
回复
这个应该是你想要的

private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if (m_SetClick)
{
SetSubNodeCheck(e.Node, e.Node.Checked);
SetParentCheck(e.Node);
SetParentNotCheck(e.Node);
m_SetClick = true;
}
}

private bool m_SetClick = true;
private void SetSubNodeCheck(TreeNode p_TreeNode,bool p_SelectCheck)
{
m_SetClick = false;
foreach (TreeNode _SubNode in p_TreeNode.Nodes)
{
_SubNode.Checked = p_SelectCheck;
SetSubNodeCheck(_SubNode, p_SelectCheck);
}

}
private void SetParentCheck(TreeNode p_TreeNode)
{
if (p_TreeNode.Checked && p_TreeNode.Parent != null)
{
p_TreeNode.Parent.Checked = true;
SetParentCheck(p_TreeNode.Parent);
}
}
private void SetParentNotCheck(TreeNode p_TreeNode)
{
if (!p_TreeNode.Checked && p_TreeNode.Parent != null)
{
foreach (TreeNode _Node in p_TreeNode.Parent.Nodes)
{
if (_Node.Checked) return;
}
p_TreeNode.Parent.Checked = false;
SetParentNotCheck(p_TreeNode.Parent);
}

}


eynStudio 2009-02-07
  • 打赏
  • 举报
回复
用递归,手工设置。。。

111,130

社区成员

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

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

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