3

我有一棵巨大的树,大约有 1000 个节点,当我使用 TreeView.ExpandAll 方法时,它会将所有树滚动到最后并不顺利。如何让它平滑滚动或根本不滚动(让留在开始)?

4

3 回答 3

1

我实际上最近不得不解决这个问题。我在调用 ExpandAll() 方法后所做的只是将TreeView中的SelectedNode设置为第一个节点,如下所示:

this.treeView1.ExpandAll();
this.treeView1.SelectedNode = this.treeView1.Nodes[0];

您要小心,因为如果 TreeView 中有 0 个节点,这可能会引发异常,因此最好将其放在 try-catch 块中。

于 2012-09-20T16:39:01.540 回答
1

通过使用 TreeView 控件的 BeginUpdate() 和 EndUpdate() 方法,您可以在将节点添加到树时暂停 TreeView 控件的绘制。在显示控件的滚动条部分时,TreeView 控件的 ExpandAll() 方法似乎忽略了该部分。

一个简单的解决方法是在将节点分支添加到 TreeView 控件之前展开父节点,同时使用这些 BeginUpdate() 和 EndUpdate() 方法。

例子:

treeView1.BeginUpdate();
for (int i = 0; i < 4; ++i) {
  TreeNode tn = new TreeNode("Node #" + i.ToString());
  tn.Expand();
  for (int j = 0; j < 250; ++j) {
    tn.Nodes.Add("Child #" + j.ToString());
  }
 treeView1.Nodes.Add(tn);
}
treeView1.EndUpdate();
于 2012-09-20T17:26:26.920 回答
0

在ExpandAll为我工作之后立即使用EnsureVisible方法:

tree.ExpandAll();
tree.Nodes[0].EnsureVisible();
于 2018-08-13T19:33:31.503 回答