如何在TreeNode中的treeView1中使用EnsureVisible()它将显示顶部的第一个子节点而不是底部作为第一个?

时间:2014-08-04 17:49:29

标签: c# .net winforms

在这个方法中,我在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();但是会指向顶部的第一项,如果我愿意,我会向下滚动以查看其他项目。

1 个答案:

答案 0 :(得分:0)

我希望我明白你的观点。 您将需要以相反的方式“排序”您的代码,这样“顶部”项目就是标记的最后一个项目,并使用EnsureVisible()进行关注。 所以首先在你的compare-&gt; EnsureVisible之前放置递归调用。这将导致在当前顶级节点之前标记的子项被检查并且(可能)标记为visbile并集中于其上。 然后,如果需要,反转您循环的TreeNode Collection - 可能像Why does IList<>.Reverse() not work like List<>().Reverse这样。 因此,他们将在最后检查First Top Item。