如何禁止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方法自动滚动到树的末尾?的主要内容,如果未能解决你的问题,请参考以下文章