private void button1_Click(object sender, EventArgs e)
        {
            foreach (TreeNode treenode in treeView1.Nodes)
            {
                findnode(treenode, textBox1.Text);
            }
        }
        private bool findnode(TreeNode tn, string value)
        {
            bool find = false;
            if (tn.Nodes.Count == 0) return false;
            foreach (TreeNode cnode in tn.Nodes)
            {
                if (cnode.Text.ToLower().Contains(value.ToLower()))
                {
                    treeView1.Select();
                    treeView1.SelectedNode = cnode;
                    cnode.Expand();
                    find = true;
                    break;
                }
                if (findnode(cnode, value))
                {
                    find = true; break;
                }
                if (!find)
                {
                    tn.Collapse();
                }            }
            return find;
        }
这段代码只能查一次,我想实现多次查询,并按顺序一步一步查下去。

解决方案 »

  1.   

    首先肯定是遍历吧,你定义一个变量,int num=-1;然后开始遍历,如果当前的node的TEXT 包含的要查询的字符,并且,node的索引小于num  那么这个就是要找的NODE当NODE的索引等于TREEVIEW的NODE.COUNT-1的时候,把NUM重新赋值为-1;
      

  2.   

    1、树下面有多个节点和子节点,根据文本框的条件进行模糊查询 
    2、按顺序查询,查完第一个根节点下的所有节点后,再查第二个根节点下的所有节点, 
    3、光标定位到查询到得该节点。 
    楼主看这样可以不:
    写个遍历函数,也就是上边你的代码,但是不要break,搜索的时候全部加载出来。
    放到一个queue里边,只要以后不改变textbox的值,就用queue.Dequeue就是了,
    导出来路径,根据路径设置TreeView的SelectedNode
      

  3.   

            private System.Collections.Queue queue; private void textBox1_TextChanged(object sender, EventArgs e)
            {
                this.queue = null;
            }
     private void button1_Click(object sender, EventArgs e)
            {
                if (queue == null)
                {
                    queue = new System.Collections.Queue();
                    foreach (TreeNode treenode in treeView1.Nodes)
                    {
                        findnode(treenode, textBox1.Text);
                    }
                }
                if (queue.Count != 0)
                {
                    treeView1.Focus();
                    TreeNode node = queue.Dequeue() as TreeNode;
                    treeView1.SelectedNode = node;
                    node.ExpandAll();
                }
            }
            private void findnode(TreeNode tn, string value)
            {
                if (tn.Text.ToLower().Contains(value.ToLower()))
                {
                    queue.Enqueue(tn);
                }
                foreach (TreeNode cnode in tn.Nodes)
                {
                    findnode(cnode,value);
                }
            }如果需要点完最后一次之后恢复到第一个,把Queue改成ArrayList