想起来了,要的结果就是你是MSDN网站那种的
http://www.microsoft.com/china/msdn/default.aspx
有搜索条件,搜索出来后,左边的树型,相应该的展开,

解决方案 »

  1.   

    我的想法是:搜索整棵树,也就是搜索XML文件(不知道你的数据库是不是XML文件),从XML文件中搜索出来的时候得到这个节点,就可以把焦点定位在这个节点上.仅供参考!希望有高手进!
      

  2.   

    谢谢楼上的兄弟
    不过你说的结果是一样的
    是为了搜索整个树,把焦点定位到搜索的目标上
    不过不是用XML
    我用的从数据库里读取数据,存入datatable里面,
    然后再从table 里取出一条条的数据加入到树的节点上希望有人来帮忙
      

  3.   

    递归 搜索树
    private void Findnode(TreeNode tn)
    {
    if(tn.Nodes == null) return; foreach(TreeNode t in tn.Nodes)
    if(t.Text == "你要找的节点")
    t.EnsureVisible();
    else
    Findnode(t);
    }树的根节点调用函数,找到后自然会展开到那里
      

  4.   

    Private Function Findnode(ByVal treelist As TreeNodeCollection)
            If treelist Is Nothing Then
                Return ""
            End If
            Dim nodex As TreeNode
            For Each nodex In treelist
                If nodex.Text = citystr Then
                    nodex.EnsureVisible()
                    nodex.Checked = True
                Else
                    Findnode(nodex.Nodes)
                End If
            Next
        End Function
    做了一小下改动
    我也是用递归的
    只是不知道怎么让节点一个个的展开
    现在能展开节点了
    只是没有办法把焦点定位到搜索的条目上去不过算了
    这样也可以了
    谢谢楼上的老兄
      

  5.   

    递归方法:
    参考一下这个
    mycnn=new OleDbConnection(@"Provider=MicroSoft.Jet.OLEDB.4.0;Data Source=f:\dazhu2.mdb");

    mycnn.Open();
    if(mycnn.State==System.Data.ConnectionState.Open)
    {

    MessageBox.Show("  数据库连接成功 !");
    OleDbDataAdapter mya=new OleDbDataAdapter("select * from t1 order by m_id,t_id,[order]",mycnn);
    DataSet mydataset=new DataSet();
    mya.Fill(mydataset,"one");//填充数据 DataTable  mytable=mydataset.Tables[0];
    //向TREEVIEW 中填充数据
    TreeNode newnode=null;
                    
    foreach(DataRow r in mytable.Rows)
    {
    data1 mydata;
                         newnode=new TreeNode();
    newnode.Text=r[4].ToString();
        mydata.id=int.Parse(r[0].ToString());
                         mydata.m_id=int.Parse(r[1].ToString());
    mydata.t_id=r[2].ToString(); //在tag中存放相关信息
    newnode.Tag=(object)mydata;

    if(int.Parse(r[1].ToString())==1)
    {
    this.treeView1.Nodes.Add(newnode);
    }
    else
    {
    TreeNode node1=null;
    int i=int.Parse(r[2].ToString());
    foreach(TreeNode nd in this.treeView1.Nodes)
    {
    //递归的方法
             node1=find_node(nd,i);  
    if(node1!=null)
    {
    this.treeView1.SelectedNode=node1;
    this.treeView1.Focus();
    //add node
    this.treeView1.SelectedNode.Nodes.Add(newnode);
    break; }

    }
    if(node1==null)
    {
    MessageBox.Show("未找到相应的结点");
    }
    } }

    }
    else
    MessageBox.Show("  数据库连接失败 !");

       
    }        //递归的方法
    private TreeNode find_node(TreeNode a,int b)
    {
    TreeNode findnode=null; //取出节点tag中的数据
    object o=a.Tag;
    data1 mydata=(data1)o;
    string m=mydata.id.ToString();
    string n=b.ToString(); if(m==n)
    {
    findnode=a;
    }
    else
    {
    foreach(TreeNode nd in a.Nodes)
    {
                      findnode=find_node(nd,b);
    if(findnode!=null)
    {
    break;
    }
    } }
    //返回找到的结点
    return findnode;
    }
      

  6.   

    楼上的老兄代码很多啊
    我先COPY下来研究一会
    谢谢大家了其实不我是我非要用VB的
    我自己本身有C#
    所以跑到C#这里发文章
    是我要做改动的这个软件以前是用VB写的
    所以没有办法晚上下班之前回来结贴
      

  7.   

    Private Function Findnode(ByVal treelist As TreeNodeCollection)
            If treelist Is Nothing Then
                Return ""
            End If
            Dim nodex As TreeNode
            For Each nodex In treelist
                If nodex.Text = citystr Then
                    nodex.EnsureVisible()
                    nodex.Checked = True
                    Me.DreamsTView1.SelectedNode = nodex
                    Me.DreamsTView1.Focus()
                Else
                    Findnode(nodex.Nodes)
                End If
            Next
        End Function此为最终更改后的VB代码
    当搜索到最后一级的时候能够定位到目标的焦点上
    但是上级就不行了,只能展开到相应的目录,不过这样已经很好了
    谢谢大家的支持,算是功能实现了