TreeView 删除问题:全部删除,以及删除父节点及其子节点

wdy9927 2006-08-30 03:58:01
1 全部删除
TreeView 是根据数据库的内容动态创建的2层 TreeView。程序运行过程中,可能会对数据库的内容进行修改,因此想更新 TreeView ,暂时想法是,把所有节点删除,然后重新创建。 但如何全部删除?只有遍历所有的节点然后删除么?

2 删除父节点同时删除其子节点
问题: mynode.Remove() ; 为什么加上这句话就会出错,有时又不会出错????不加的话,遍历就没问题,每个节点都出现一次。奇怪!

代码如下:
//判断选定的节点是否存在下一级节点
if ( mySelectedNode.Nodes.Count == 0 )
{
}
else
{
if (mySelectedNode.Parent == null)
{
foreach(TreeNode mynode in mySelectedNode.Nodes)
{
Console.WriteLine("未被删除的子节点 {0} ",mynode.Text);
/*
* 这里有问题,同一子节点可能会出现多次,第二次 Remove 的时候,就会出错。如果没
* 有这个 Remove ,就不会出现同一子节点出现多次的现象!
*/
mynode.Remove() ;//删除子节点
}
}
//MessageBox.Show ( "请先删除此节点中的子节点!" , "提示信息" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;
}

mySelectedNode.Remove();//删除父节点
mySelectedNode=null;






另有2个问题,各位帮忙看看。

TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794


C# 中 Recordset 中的 RecordCount 为什么总是返回 -1
http://community.csdn.net/Expert/topic/4985/4985677.xml?temp=.4153101
...全文
2234 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Knight94 2006-09-06
  • 打赏
  • 举报
回复
to 2

不是删除的问题,而是不能再foreach中去做,你可以通过for来做,参看
http://blog.csdn.net/Knight94/archive/2006/08/20/1100236.aspx

提供的删除方法。
wdy9927 2006-09-06
  • 打赏
  • 举报
回复

问题2还没解决。

如果删除父节点的时候不删除子节点,会有什么后果?



另有个问题,各位帮忙看看。

TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794
wdy9927 2006-09-06
  • 打赏
  • 举报
回复
谢各位
Knight94 2006-09-06
  • 打赏
  • 举报
回复
我给了答案,你自己去看吧
wdy9927 2006-09-06
  • 打赏
  • 举报
回复
新方法如下,测试可用。



//删除 parent 下所有的子节点
private void delSubNodes(TreeNode parent )
{
if (parent==null)
{
return;
}
//判断选定的节点是否存在下一级节点
if ( parent.Nodes.Count == 0 )
{
}
else
{
for( int i = parent.Nodes.Count - 1; i >=0; i-- )
{
Console.WriteLine(" 删除: {0}",parent.Nodes[i].Text);
parent.Nodes.RemoveAt(i);
}
}
}
wdy9927 2006-09-06
  • 打赏
  • 举报
回复
哈哈,对啊。用 for 可以解决问题。

谢 Knight94(愚翁)。

另 下面这个问题您老解决过没?

TreeView 中,如何使右键单击和左键单击一样,单击空白处不选择任何一个node
http://community.csdn.net/Expert/topic/4975/4975490.xml?temp=.2613794


wdy9927 2006-08-30
  • 打赏
  • 举报
回复
问题1解决了。
wdy9927 2006-08-30
  • 打赏
  • 举报
回复

如果删除父节点的时候不删除子节点,会有什么后果?

用递归麻烦还容易出错。
oolongTea 2006-08-30
  • 打赏
  • 举报
回复
foreach(TreeNode mynode in mySelectedNode.Nodes)
{
Console.WriteLine("未被删除的子节点 {0} ",mynode.Text);
/*
* 这里有问题,同一子节点可能会出现多次,第二次 Remove 的时候,就会出错。如果没
* 有这个 Remove ,就不会出现同一子节点出现多次的现象!
*/
mynode.Remove() ;//删除子节点
}
-------
用foreach的时候,删除之后,索引值已改变,所以出错
建议用递归
oolongTea 2006-08-30
  • 打赏
  • 举报
回复
1:
treeView1.Nodes.Clear();

111,094

社区成员

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

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

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