C# SplitContainer面板以自动适应内容

C# SplitContainer面板以自动适应内容,c#,vb.net,winforms,controls,splitcontainer,C#,Vb.net,Winforms,Controls,Splitcontainer,我正在寻找非常简单的功能,但是我找不到(令人惊讶的是,我找不到其他人提出这个问题) 我有两个面板的拆分容器-非常简单的设置,左边是导航树视图,右边是项目列表视图 现在,我想要的是,当左侧的所有内容(treeview)都可见且水平滚动条不显示时,拆分器会自动固定在位置上。我事先不知道物品的大小(但我知道只有1层深)。类似于“自动增长,然后修复拆分器”。当然,我不是第一个寻找此功能的人:) 你知道如何做到这一点吗 谢谢, Martin这相当麻烦,当用户展开和折叠节点时,滚动条可能会再次出现和消失。只

我正在寻找非常简单的功能,但是我找不到(令人惊讶的是,我找不到其他人提出这个问题)

我有两个面板的拆分容器-非常简单的设置,左边是导航树视图,右边是项目列表视图

现在,我想要的是,当左侧的所有内容(treeview)都可见且水平滚动条不显示时,拆分器会自动固定在位置上。我事先不知道物品的大小(但我知道只有1层深)。类似于“自动增长,然后修复拆分器”。当然,我不是第一个寻找此功能的人:)

你知道如何做到这一点吗

谢谢,
Martin

这相当麻烦,当用户展开和折叠节点时,滚动条可能会再次出现和消失。只能测量扩展节点的大小。然而,在您使用的UI类型中,这种情况很可能发生。在这种情况下,此代码应该可以解决您的问题:

Private Shared Function GetMaxNodeWidth(ByVal nodes As TreeNodeCollection, ByVal width As Integer) As Integer
    For Each node As TreeNode In nodes
        width = Math.Max(width, node.Bounds.Right)
        width = GetMaxNodeWidth(node.Nodes, width)
    Next
    Return width
End Function

Public Shared Function ResizeTreeView(ByVal tree As TreeView) As Integer
    Dim width = GetMaxNodeWidth(tree.Nodes, 0)
    tree.ClientSize = New Size(width, tree.ClientSize.Height)
    return tree.Width
End Sub
填充控件后调用ResizeTreeView()。示例用法:

    TreeView1.Nodes.Add("Customers")
    '' etc...
    SplitContainer1.SplitterDistance = ResizeTreeView(TreeView1)