怎么让所有子节点被选中,父节点自动选中 TreeView

 我来答
说着笑着d午后
2011-06-10 · TA获得超过282个赞
知道小有建树答主
回答量:426
采纳率:0%
帮助的人:267万
展开全部
代码就不贴了,给你个解决的方法,判断节点的选中状态,然后获取该节点的父节点下的所有子节点,判断是否所有子节点都选中了,若是的话就选中父节点
追问
但要写到哪个事件里面啊?要是写到AfterCheck里面就是死循环啊。
追答
死循环的话肯定是你的代码问题了
百度网友3215f04
2011-06-13 · TA获得超过136个赞
知道小有建树答主
回答量:150
采纳率:0%
帮助的人:95.6万
展开全部
//设置标志,防止死循环
bool check = false;

//节点勾选后事件,如果更改某一节点状态会自动触发,所以在后面的方法中无需递归
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
if(check==false)
setchild(e.Node);
setparent(e.Node);
check = false;
}

//设置子节点状态
private void setchild(TreeNode node)
{
foreach (TreeNode child in node.Nodes)
{
child.Checked = node.Checked;
}
check = true;
}

//设置父节点状态
private void setparent(TreeNode node)
{
if (node.Parent != null)
{
//如果当前节点状态为勾选,则需要所有兄弟节点都勾选才能勾选父节点
if (node.Checked)
foreach (TreeNode brother in node.Parent.Nodes)
{
if (brother.Checked == false)
return;
}
node.Parent.Checked = node.Checked;
}
}

原理:先递归到最底层节点,由checkChild()勾选上最底层节点,然后改变check状态,再checkParent()勾选最底层的上一层节点,虽然触发勾选事件,但是check状态改变了,不能再向下勾选,只能向上递归,从而防止了死循环。

普通方式死循环原理:递归到最底层后,勾选上最底层,然后勾选最底层的上一层,但是会自动触发勾选事件,再次递归到最底层,因此造成死循环。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
607nojkhb
推荐于2018-04-14 · TA获得超过3621个赞
知道大有可为答主
回答量:4890
采纳率:0%
帮助的人:3140万
展开全部
如果父结点已经选中了的话,可以直接通过数据库等方法枚举子结点为,若不需要显式的在TVW控件中表示这个选中的话,直接将这种操作视为子结点全选即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6515d5582
2011-06-11
知道答主
回答量:32
采纳率:0%
帮助的人:2.5万
展开全部
遍历父节点的所有子节点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式