在winform中部分切断节点TreeView

问题描述:

我在解决这个问题有什么问题。我一直在搜索,并没有找到这个问题的很多解决方案。我发现的唯一“解决方案”是一个破解,然后崩溃最后一个节点。在winform中部分切断节点TreeView

this.Nodes[this.Nodes.Count - 1].Expand(); 
this.Nodes[this.Nodes.Count - 1].Collapse(); 

你可以从这个屏幕上看到拍摄的最后一个节点被部分切断,只有这样,才能揭露它是扩大这将导致TreeView的正确重新呈现自身的节点。

enter image description here

我务实添加节点到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); 
    } 
} 
} 

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

+1

Upvoted让你可以上传你的图片.. – stuartd

+0

谢谢。我已经添加了图像! – Smeiff

使用treeView.BeginUpdate()treeView.EndUpdate()之前任何视觉上的变化后:试试这个:

 TreeNode rootNode = treeView1.Nodes[0]; 
     TreeNode lastNode = rootNode.Nodes[rootNode.Nodes.Count - 1]; 
     lastNode.EnsureVisible(); 

或者使用来自MSDN文章的例子中得到的最后一个节点。

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

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

+2

谢谢!这工作。树正在构建时,我的UI不再更新,但树现在看起来正确。 – Smeiff

+0

在我原来的问题中,我说过我已经使用了expand,接着是collapse,这解决了我的问题。这不是我正在寻找的解决方案。我想知道为什么该项目首先被切断。我不想进行展开,折叠的原因是因为在展开时,它会查询该节点内的内容的API。我这样做,以节省初始加载时间,否则负载将永远 – Smeiff

您可以调用的问题上EnsureVisible的TreeViewNode,就像这样:

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

检查MSDN entry此方法以获得更多信息。

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

TreeNode lastNode = treeView1.Nodes[treeView1.Nodes.Count - 1]. 
    Nodes[treeView1.Nodes[treeView1.Nodes.Count - 1].Nodes.Count - 1]; 
+0

我没有根节点,对不起。 – Smeiff

+0

那么,在我自己的例子中,最后一个节点滚动到视图中。我看不到为什么它不适合你... – Treb