结构类似下面
aaaa
    1dfd
    1090
    2sdd
    1dfs
bbbb
    1dfdd
    1090d
    2sddd
    1dfsd我现在要实现一个检索功能(只检索子节点)
比如说我要检索包含1的子节点
我有个检索的按钮
点第一下 选中1dfd
点第二下 选中1090
点第三下 选中1dfs
点第四下 选中1dfdd
以此类推

当选中1dfsd时,再点下按钮又选中了1dfd,这样就实现了一个循环(其实就类似一本的文本查询)有有大侠帮帮偶啊?谢谢啦    

解决方案 »

  1.   

    是查出所有某一层的节点?
    //node为根节点
    List<treenode> list=new List<treenode>();
    if(node.childnode.count!=0)
    {   
        //遍历第一层节点,如aaaa,bbbb
        foreach(treenode child in node.childnode)
        {
            if(child.childnode.count!=0)
            {
                //遍历1dfd等二级节点
                foreach(treenode secondChild in node.childnode)
                {
                    list.add(secondChild);
                }
            }
        }
    }
      

  2.   

      //下面的三个函数根据Session中选定的ParentName的值,自动展开刷新前的结点   
        
      private   void   FindInTree(string   strNodeName)   
      {   
      foreach(TreeNode   tn   in   TV_Org.Nodes)   
      {   
      if   (tn.Text   !=   strNodeName)   
      {   
      FindInTree(tn,strNodeName);   
      }   
      else   
      {   
      ExpandTree(tn);   
      return;   
      }   
      }   
      }   
        
      private   void   FindInTree(TreeNode   objTreeNode,string   strNodeName)   
      {   
      foreach   (TreeNode   tn   in   objTreeNode.Nodes)   
      {   
      if   (tn.Text   !=   strNodeName)   
      {   
      FindInTree(tn,strNodeName);   
      }   
      else   
      {   
      ExpandTree(tn);   
      return;   
      }   
      }   
      }   
        
      private   void   ExpandTree(TreeNode   objTreeNode)   
      {   
      string   strIndex   =   "0";   
      objTreeNode.Expanded   =   true;   
      strIndex   =   objTreeNode.GetNodeIndex();   
      while   (objTreeNode.Parent   is   TreeNode)   
      {   
      objTreeNode   =   ((TreeNode)objTreeNode.Parent);   
      objTreeNode.Expanded   =   true;   
      }   
      TV_Org.SelectedNodeIndex   =   strIndex;   
      }   
      

  3.   


                int iCount = treeView1.GetNodeCount(true);
                string sSearch = textBox1.Text;
                
                TreeNode node = treeView1.SelectedNode;
                for (int i = 0; i < iCount; i++) 
                {
                    node = node.NextVisibleNode;
                    if (null == node)
                    {
                        node = treeView1.Nodes[0];
                    }
                    
                    if (node.Text.Contains(sSearch))
                    {
                        treeView1.SelectedNode = node;
                        break;
                    }                if(i==iCount-1)
                    {
                        MessageBox.Show("没有找到包含查询内容的节点");
                    }
                }
      

  4.   

    publice class xxx
    {
            int m = 0; 
            private void button1_Click_1(object sender, EventArgs e)
            {          
                 if (m == treeView1.Nodes[0].Nodes.Count)
                 {
                     for (int i = 0; i < treeView1.Nodes[0].Nodes.Count; i++)
                     {
                         treeView1.Nodes[0].Nodes[i].Checked = false;
                     }
                     m = 0;
                 }             treeView1.Nodes[0].Nodes[m++].Checked = true;  
            }  
    }
      

  5.   

    private   void   SelectByID(TreeView   tv,string   ID)   
      {   
      foreach(TreeNode   tn   in   tv.Nodes)   
      {   
        if(FindNode(tv,tn,ID))   
        {   
         break;   
        }   
      }   
      }   
      private   bool   FindNode(TreeView   tv,TreeNode   tn,string   ID)   
      {   
      string   s=tn.Text;   
      if(tn.ID==ID)   
      {   
      tv.SelectedNodeIndex=tn.GetNodeIndex();   
      return   true;   
      }   
      else   
      {     
      bool   t=false;   
      foreach(TreeNode   ctn   in   tn.Nodes)   
      {   
      if(FindNode(tv,ctn,ID))   
      {   
      t=true;   
      break;   
      }   
      }   
      return   t;   
      }   
      }   
      

  6.   

    public void FindNodes(TreeNode tn,bool NodeChecked)
      {
        foreach(TreeNode node in tn.Nodes)
        {
          node.Checked=NodeChecked;
          if(node.Nodes.Count>0)
            this.FindNodes(node,NodeChecked);
        }
      }
      

  7.   

       /// <summary>
            /// 显示nod结点
            /// </summary>
            /// <param name="nod">要显示的节点</param>
            private void go(ref Node nod)
            {
                TreeNode father = find(treeView1, nod.ParentId.ToString());
                TreeNode son = new TreeNode();            if (father != null)
                {
                    son.Name = nod.Id.ToString();
                    son.Text = nod.Cmean;
                    if (nod.state == 0)
                    {
                        son.Text += "_(" + nod.lp.ToString() + "," + Convert.ToString(nod.lctr - nod.lp) + ")" + "_(" + Convert.ToString(nod.rctr - nod.rp) + "," + nod.rp.ToString() + ")";
                    }
                    else
                    {
                        if (nod.state == 1)
                        {
                            son.Text += "_(" + nod.lp.ToString() + "," + Convert.ToString(nod.lctr - nod.lp) + ")" + "_(" + Convert.ToString(nod.rctr - nod.rp) + "," + nod.rp.ToString() + ")";
                        }
                        else
                            if (nod.state == 2)
                            {
                                //if (nod.ParentId == (nod.Id * 2 + 1))
                                if (father.Text.IndexOf(")_") >= 0)
                                    son.Text +="_(0,0"+ father.Text.Substring(father.Text.IndexOf(")_"), father.Text.Length - father.Text.IndexOf(")_"));
                                else
                                    son.Text = "空";
                            }
                    }                father.Nodes.Add(son);
                }
                if (nod.lchild != null)
                {
                    go(ref nod.lchild);
                }
                if (nod.rchild != null)
                {
                    go(ref nod.rchild);
                }        }
            /// <summary>
            /// 在Treeview里找到s
            /// </summary>
            /// <param name="v">treeview</param>
            /// <param name="s">结点的内容</param>
            /// <returns></returns>
            private TreeNode find(TreeView v, string s)
            {
                foreach (TreeNode no in v.Nodes)
                {
                    if (no.Name == s)
                        return no;
                    else
                        return can(no, s);
                }
                return null;
            }
            /// <summary>
            /// 在no里找s
            /// </summary>
            /// <param name="no">开始的结点</param>
            /// <param name="s">结点的内容</param>
            /// <returns></returns>
            private TreeNode can(TreeNode no, string s)
            {
                foreach (TreeNode node in no.Nodes)
                {
                    if (node.Name == s)
                        return node;
                }
                foreach (TreeNode node in no.Nodes)
                {
                    if (node.Nodes.Count > 0)
                        return can(node, s);
                }
                return null;
            }
    我的毕设
      

  8.   


    我的是循环的,不过没考虑节点缩起来的情况,开始加个expand就ok了,呵呵。