【问题标题】:Node is partially cut off in winform TreeView节点在winform TreeView中被部分切断
【发布时间】:2012-08-31 08:06:10
【问题描述】:

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

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

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

【问题讨论】:

  • 投了赞成票,这样你就可以上传你的图片了..
  • 谢谢。我已经添加了图片!

标签: c# .net winforms treeview treenode


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢!这行得通。构建树时我的 UI 不再更新,但树现在看起来正确。
【解决方案2】:

您可以在相关的 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];

【讨论】:

  • 我没有根节点,抱歉。
  • 好吧,在我自己的示例中它可以工作,最后一个节点滚动到视图中。我看不出它为什么不适合你……
【解决方案3】:

【讨论】:

  • 在我最初的问题中,我说我使用了展开,然后是折叠,这解决了我的问题。这不是我正在寻找的解决方案。我想知道为什么该项目首先被切断。我不想进行展开、折叠的原因是因为在展开时,它会查询 API 以获取该节点内的内容。我这样做是为了节省初始加载时间,否则加载将永远持续
猜你喜欢
  • 1970-01-01
  • 2013-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多