如何循环遍历树,选中指定的节点

anya 2008-12-22 12:26:17
如题.是二叉树,想找到其中一个节点并选中,但是断点跟踪,总是在第一个根节点执行,陷入死循环.请大虾们帮忙看下,是哪里的代码出错了.谢谢.
a
|-a1
|-a2
|-a3
|-a4
|-..
b
|-b1
|-b2
|-b3
|-b4
|-..

如果二级节点的value=传递来的ID值,那么该接点被选中.(不找根接点)





private void ShowAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
string a="节点名: " + node.Value ;
string b="\r\n节点Text:" + node.Text;
string c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();

if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点
node.Selected = true;
break;
}
else
{
ShowAllNodes(this.TreeView1.Nodes);
}
}
}



调用: ShowAllNodes(this.TreeView1.Nodes);
...全文
353 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangshenghong 2008-12-22
  • 打赏
  • 举报
回复
GTX280 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tmxk2002 的回复:]
你这个递归方法肯定永远停留在第一个根节点上

这样写:
private  void ShowAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
string  a="节点名: " + node.Value ;
string  b="\r\n节点Text:" + node.Text;
string  c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();

if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点…
[/Quote]
wuyq11 2008-12-22
  • 打赏
  • 举报
回复
foreach (TreeNode node in nodes)
{
string a="节点名: " + node.Value ;
string b="\r\n节点Text:" + node.Text;
string c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();

if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点
node.Selected = true;
break;
}
else if(int.Parse(c)>0)
{
ShowAllNodes(node.ChildNodes);
}
}
  • 打赏
  • 举报
回复
你这个递归方法肯定永远停留在第一个根节点上

这样写:
private void ShowAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
string a="节点名: " + node.Value ;
string b="\r\n节点Text:" + node.Text;
string c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();

if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点
node.Selected = true;
break;
}
else
{
ShowAllNodes(node.ChildNodes);
}
}
}

anya 2008-12-22
  • 打赏
  • 举报
回复
谢谢大家,好了,我把这个顺序给颠倒了一下,就好了.
代码如下.
if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点
node.Selected = true;
break;
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
现在结帖,来者有分,感谢支持.
anya 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tmxk2002 的回复:]
你这个递归方法肯定永远停留在第一个根节点上

这样写:
private void ShowAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
string a="节点名: " + node.Value ;
string b="\r\n节点Text:" + node.Text;
string c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();


[/Quote]




谢谢大家,参考楼上意见,我改了一下,果然跳出死循环了,不过当执行到
if (node.Value == this.lbID.Text.Trim())
{
TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点
node.Selected = true;
break;
}

的"TreeView1.SelectedNode.Value = node.Value ;//高亮显示节点 " 时,
断点跟踪时显示系统提示"未将对象引用到对象的实例,使用“new”关键字创建对象实例"

把这句去掉,系统就执行过去了,但是节点没有被选中状态,没有颜色的变化,请问这是怎么回事

bwangel 2008-12-22
  • 打赏
  • 举报
回复
二叉树和树是完全不同的两个概念
Crazy_Xia 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 tmxk2002 的回复:]
你这个递归方法肯定永远停留在第一个根节点上

这样写:
private void ShowAllNodes(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
string a="节点名: " + node.Value ;
string b="\r\n节点Text:" + node.Text;
string c= "\r\n子节点个数:" + node.ChildNodes.Count.ToString();


[/Quote]
-----------------------
可以结贴了

111,130

社区成员

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

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

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