2013-04-23 128 views
0

我正在尋找非常簡單的功能,但是我無法找到它(並且令人驚訝的是我找不到其他任何人提出這個問題)。SplitContainer面板自動適應內容

我已經有兩個面板拆分容器 - 非常簡單的設置,左側的導航TreeView,右側的項目ListView。

現在,我想要的是當左側(treeview)的所有內容都可見並且不顯示水平滾動條時,splitter會自動固定在位置上。我事先不知道這些物品的大小(但我知道它只有1層深)。像「AutoGrow,然後修復拆分器」。當然,我不是第一個正在尋找這種功能:)

任何想法如何實現這一目標?

感謝, 馬丁

回答

2

這是相當麻煩的,滾動條可能會出現,併爲用戶展開和摺疊節點再次消失。您只能測量擴展節點的大小。不過,您在使用的那種用戶界面中可能會出現這種情況。您填寫的控制後

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)