C#如图,如何删除treeview里所有空节点

彩色图片的节点是带有值的叶子节点,如节点[30],他们的imageindex=1;黑白图片的节点是非值节点imageindex=0。如果要删除所有的非值节点,但路径中包含... 彩色图片的节点是带有值的叶子节点,如节点[30],他们的imageindex=1;黑白图片的节点是非值节点imageindex=0。如果要删除所有的非值节点,但路径中包含有值节点的不删除。怎么弄?

删除操作后,应该是这样子:

-------------------------------------------------------------------------------
采用下面的方法只能删除最终一层的,不能全部删完。
private void del(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
if (node.Nodes.Count > 0)
{
del(node.Nodes);
}
else
{
if (node.ImageIndex != 1)
node.Remove();
}
}
}
-----------------------------------------------------------------------------------------------------
咋整?
展开
 我来答
Ben
2013-04-09 · 知道合伙人软件行家
Ben
知道合伙人软件行家
采纳数:860 获赞数:2875
认真回答者.

向TA提问 私信TA
展开全部
private void label1_MouseUp(object sender, MouseEventArgs e)
{
for (int i = 0; i < this.treeView1.Nodes.Count; i++)
{
ClearTreeView(this.treeView1.Nodes[i]);
}
}
public void ClearTreeView(TreeNode node)
{
if (node.ImageIndex == 0 && node.Nodes.Count == 0)
{
this.treeView1.Nodes.Remove(node);
}
else
{
for (int i = 0; i < node.Nodes.Count; i++)
{
ClearTreeView(node.Nodes[i]);
}
}
}

递归遍历删除即可....

if (node.ImageIndex == 0 && node.Nodes.Count == 0)

这里的判断注意判断好是不是你指定的IMAGE类型.即可...拿到对应的树节点下是否有子节点
更多追问追答
追问
大师,你写的这个,效果和我的一样,点击一次按钮,删除一层的节点,并不能一下把树中所有空节点全部删除,需要多次点击按钮才能删除完。
我觉的需要一个while语句,检测整个树中是否还存在空节点,以决定继续执行递归删除。
我在判断是否存在空节点的时候,也用递归,如果存在,为true,跳出,可因为是深层递归,并不能跳出整个过程,只能跳出当前递归层次,break、return均不能。
写了整个上午,总是不行。
追答
= =..我这段代码我自己跑了的呀...可以清空啊..
前提是你知道你的IMAGE节点是什么...
呀..对了...忘记告诉你了..
这个TREE是CLONE出来的..不要直接写上你自己的TREE对象.不然一边删一边就又多出来各种木有的了..

你要的效果是删除图片大部分为白色的树节点.所以你得判断是不是白色的...不然你就会把你的叶子节点删掉..
达不到你要的效果.所以才加了一句if (node.ImageIndex == 0
如果你无视.只要没有子节点就是删除..那么你在循环过程中删掉一层又多一层没有子节点的.永远删不完

我跟你的代码不同的一点
for (int i = 0; i < node.Nodes.Count; i++)
{
ClearTreeView(node.Nodes[i]);
}

找到子节点仍旧是循环遍历的往深处跑.这也就是我这段能删完.你的不能的原因撒..
义鸿飞SD
2013-04-09 · TA获得超过198个赞
知道答主
回答量:271
采纳率:0%
帮助的人:146万
展开全部
你把fi和else内的代码交换位置
还要判断if(node.inageindex!=1 && node.nodes.count==0)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
130lichong
2013-04-09 · TA获得超过4894个赞
知道大有可为答主
回答量:1.5万
采纳率:0%
帮助的人:4052万
展开全部
TreeNode的节点= this.treeView1.SelectedNode;
(node! = NULL)

{

node.Remove();
}
追问
如果一个一个的点,还要提问吗?要一次性全部删完。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式