5

我在弄清楚这个问题是什么时遇到了问题。我用谷歌搜索并没有找到很多解决这个问题的方法。我发现的唯一“解决方案”是扩展然后折叠最后一个节点的技巧。

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

这就是我将节点添加到列表中的方式。有没有人有一个干净的解决方案来解决这个问题?

4

3 回答 3

6

在任何视觉变化之前和之后使用treeView.BeginUpdate() 和。treeView.EndUpdate()

SuspendLayout() 和 ResumeLayout() 也很有用!

如果要更新 UI,请不要一次性添加所有节点!一个接一个地添加,夹在 begin 和 endupdate 调用之间。

于 2012-09-06T14:54:33.903 回答
1

您可以调用EnsureVisible有问题的 TreeViewNode,如下所示:

treeView1.Nodes[treeView1.Nodes.Count - 1].EnsureVisible();

查看此方法的MSDN 条目以获取更多信息。

编辑:
我想我找到了。您可能有一个根节点,而您想要滚动到视图中的节点是该根节点的子节点。试试这个:

        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];
于 2012-09-06T13:40:43.157 回答
0

查看 TreeNode 类中的 Expand 方法。请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.aspx

于 2012-09-06T13:31:37.157 回答