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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何禁止TreeView.ExpandAll方法自动滚动到树的末尾?相关的知识,希望对你有一定的参考价值。

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

答案

通过使用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();
另一答案

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

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

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

另一答案

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

tree.ExpandAll();
tree.Nodes[0].EnsureVisible();

以上是关于如何禁止TreeView.ExpandAll方法自动滚动到树的末尾?的主要内容,如果未能解决你的问题,请参考以下文章

以树形显示的窗体界面

C# treeview 使用笔记

winform menuStrip 保持展开

如何禁止Gridview上下滑动

怎么禁止开机自动启动软件

电脑上开机自启动在哪里设置添加