
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();
}
}
}
-----------------------------------------------------------------------------------------------------
咋整? 展开
删除操作后,应该是这样子:
-------------------------------------------------------------------------------
采用下面的方法只能删除最终一层的,不能全部删完。
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();
}
}
}
-----------------------------------------------------------------------------------------------------
咋整? 展开
展开全部
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类型.即可...拿到对应的树节点下是否有子节点
{
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]);
}
找到子节点仍旧是循环遍历的往深处跑.这也就是我这段能删完.你的不能的原因撒..
展开全部
你把fi和else内的代码交换位置
还要判断if(node.inageindex!=1 && node.nodes.count==0)
还要判断if(node.inageindex!=1 && node.nodes.count==0)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TreeNode的节点= this.treeView1.SelectedNode;
(node! = NULL)
{
node.Remove();
}
(node! = NULL)
{
node.Remove();
}
追问
如果一个一个的点,还要提问吗?要一次性全部删完。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询