SplitContainer面板自动适应内容

时间:2013-04-23 19:17:26

标签: c# vb.net winforms controls splitcontainer

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

我有两个面板的拆分容器 - 非常简单的设置,左侧是导航TreeView,右侧是项目ListView。

现在,我想要的是当左侧(树视图)的所有内容都可见且未显示水平滚动条时,分割器会自动固定在位置上。我事先并不知道物品的大小(但我知道它只有1层深)。像“AutoGrow然后修复分离器”之类的东西。当然,我不是第一个寻找此功能的人:)

知道如何实现这个目标吗?

谢谢, 马丁

1 个答案:

答案 0 :(得分:2)

这非常麻烦,当用户展开和折叠节点时,滚动条可能会再次出现和消失。您只能测量展开节点的大小。然而,在您使用的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)