繁体   English   中英

节点在winform TreeView中被部分切断

[英]Node is partially cut off in winform TreeView

我有问题弄清楚这个问题是什么。 我已经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);
     }
 }
 }

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

在任何视觉更改之前和之后使用treeView.BeginUpdate()treeView.EndUpdate()

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

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

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

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];

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM