如何禁止TreeView.ExpandAll方法自动滚动到树的末尾?

问题描述 投票:3回答:3

我有一个巨大的树,大约1000个节点,当我使用TreeView.ExpandAll方法时,它滚动所有树到最后不顺利。如何使其平滑滚动或根本不滚动(让我们继续滚动)?

c# .net winforms treeview
3个回答
1
投票

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

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

例:

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();

1
投票

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

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

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


0
投票

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

tree.ExpandAll();
tree.Nodes[0].EnsureVisible();
© www.soinside.com 2019 - 2024. All rights reserved.