在这个方法中,我在TreeNodes中进行搜索:
private void FindByText()
{
TreeNodeCollection nodes = treeView1.Nodes;
foreach (TreeNode n in nodes)
{
FindRecursive(n);
}
}
FindRecursive:
private void FindRecursive(TreeNode treeNode)
{
foreach (TreeNode tn in treeNode.Nodes)
{
string result = Regex.Replace(tn.Text, @"^\d*\.\s*", string.Empty);
if (tn.Text.Contains(this.txtNodeTextSearch.Text))
{
tn.BackColor = Color.Yellow;
tn.EnsureVisible();
count++;
label11.Text = count.ToString();
}
FindRecursive(tn);
}
}
在FindRecursive方法中,我做了:
tn.EnsureVisible();
但是,例如,如果我搜索并找到20个项目,它将向下滚动并向我显示最后找到的项目。 然后我需要匆匆看看它找到的其他物品。
我需要它会像tn.EnsureVisible();但是会指向顶部的第一项,如果我愿意,我会向下滚动以查看其他项目。
答案 0 :(得分:0)
我希望我明白你的观点。 您将需要以相反的方式“排序”您的代码,这样“顶部”项目就是标记的最后一个项目,并使用EnsureVisible()进行关注。 所以首先在你的compare-&gt; EnsureVisible之前放置递归调用。这将导致在当前顶级节点之前标记的子项被检查并且(可能)标记为visbile并集中于其上。 然后,如果需要,反转您循环的TreeNode Collection - 可能像Why does IList<>.Reverse() not work like List<>().Reverse这样。 因此,他们将在最后检查First Top Item。