ms-help://MS.VSCC/MS.MSDNVS.2052/cpref/html/frlrfsystemcollectionsqueueclasstopic.htm

解决方案 »

  1.   

    能有直接的函数来返回所有子节点的集合么?实在不行我才考虑用递归或层次遍历。    或者,因为我写这个方法是为了判断树中一节点A是否为另一节点B的祖先,那么有直接判断的此类函数么?    up一个。
      

  2.   

    555555,用队列写了一个,可是类型转换时出问题了,队列里保存的是object类型,树节点入队时当然没问题;可是节点出队列时出问题了,object类型无法隐式转成TreeNode类型 :(public TreeNode GetNode1(int ID)
           {
    System.Windows.Forms.TreeNode thisNode=null;
    System.Collections.Queue Queue1=new Queue();
    Queue1.Enqueue(treeview1.TopNode);
    while (Queue1.Count!=0)
    {
          System.Windows.Forms.TreeNode QueueNode=Queue1.Dequeue(); //这里出了问题,队列中的值无法转换成treenode类型
          if(Convert.ToInt32(QueueNode.Tag)==ID)
          {
    thisNode=QueueNode;
          }
         foreach (TreeNode node in QueueNode.Nodes)
         {
    Queue1.Enqueue(node);
        }
    }
    return thisNode;
          }
      还有什么办法呢?
      

  3.   

    for(int i=0;i<TreeView1.Nodes.Count;i++)
        if(TreeView1.Nodes[i]==TextBox1.Text)
          {
            string index1=TreeView1.Nodes[i].GetNodeIndex();//取得index
            TreeView1.SelectedNodeIndex=index1;
       }
      

  4.   

    可以用递归的方法,下面是一个打印所有节点文本的例子,可供参考!
    private void Print(TreeNode treeNode)
    {
    this.myText = this.myText + treeNode.Text;
    foreach (TreeNode tn in treeNode.Nodes)//递归
    {
    Print(tn);
    }
    }private void Call(TreeView treeView)
    {
    TreeNodeCollection nodes = treeView.Nodes;
    foreach (TreeNode n in nodes)
    {
    Print(n);
    }
    }private void button1_Click(object sender, System.EventArgs e)
    {
    TreeView myTreeView = this.treeView1;
    this.Call(myTreeView);
    this.textBox1.Text = this.myText;
    }使用双重递归是个不错的办法
      

  5.   

    To  misters(小鱼):   我的第一篇(见楼顶)就是按照你这个来写的,在C#中里行不通,TreeView1.Nodes代表的只是第一层子节点的集合,在里面循环完就停止了,不能接着往下访问第二、第三层的节点。   我直接根据存储在数据库中的id写了一个判断一节点是否为另一节点子节点的类,抛开了树在逻辑上的显示,省得节点和id转化来转化去太麻烦。   不过还是多谢各位啊!