我在弄清楚这个问题是什么时遇到了问题。我已经google了,并没有找到很多解决这个问题的方法。我找到的唯一“解决方案”是扩展,然后崩溃最后一个节点。
this.Nodes[this.Nodes.Count - 1].Expand();
this.Nodes[this.Nodes.Count - 1].Collapse();
从这个屏幕截图中可以看出,最后一个节点被部分切断,暴露它的唯一方法是展开节点,这将导致TreeView正确地重新渲染。
我实际上是在TreeView中添加节点。我不知道这是否会影响结果,但我已将TreeView扩展到我自己的类,所以我可以添加一些属性和方法。
public class MyTreeView : TreeView
{
public void BuildTree()
{
this.Nodes.Clear();
foreach (TestSetFolder folder in Folders)
{
MyTreeNode node = new MyTreeNode();
node.Name = folder.Name;
node.Text = folder.Name;
node.Tag = folder;
node.FolderID = folder.NodeID;
node.IsPopulated = false;
this.Nodes.Add(node);
}
}
}
这就是我将节点添加到列表的方式。有没有人对这个问题有一个干净的解决方案?
答案 0 :(得分:6)
在任何视觉更改之前和之后使用treeView.BeginUpdate()
和treeView.EndUpdate()
。
SuspendLayout()和ResumeLayout()也很有用!
如果您想要更新UI,请不要一次性添加所有节点!一个接一个地添加,夹在begin和endupdate调用之间。
答案 1 :(得分:1)
你可以在有问题的TreeViewNode上调用EnsureVisible
,如下所示:
treeView1.Nodes[treeView1.Nodes.Count - 1].EnsureVisible();
检查此方法的MSDN entry以获取更多信息。
修改强>
我想我找到了。您可能有一个根节点,要滚动到视图的节点是该根节点的子节点。试试这个:
TreeNode rootNode = treeView1.Nodes[0];
TreeNode lastNode = rootNode.Nodes[rootNode.Nodes.Count - 1];
lastNode.EnsureVisible();
或者使用MSDN文章中的示例获取最后一个节点:
TreeNode lastNode = treeView1.Nodes[treeView1.Nodes.Count - 1].
Nodes[treeView1.Nodes[treeView1.Nodes.Count - 1].Nodes.Count - 1];
答案 2 :(得分:0)
查看TreeNode类中的Expand方法。见http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.aspx