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;
}
这段代码只能查一次,我想实现多次查询,并按顺序一步一步查下去。
{
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;
}
这段代码只能查一次,我想实现多次查询,并按顺序一步一步查下去。
2、按顺序查询,查完第一个根节点下的所有节点后,再查第二个根节点下的所有节点,
3、光标定位到查询到得该节点。
楼主看这样可以不:
写个遍历函数,也就是上边你的代码,但是不要break,搜索的时候全部加载出来。
放到一个queue里边,只要以后不改变textbox的值,就用queue.Dequeue就是了,
导出来路径,根据路径设置TreeView的SelectedNode
{
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