2013-04-23 6 views
0

Я ищу довольно простую функциональность, однако я не могу ее найти (и, на удивление, я не могу найти кого-либо еще, задающего этот вопрос).Панель SplitContainer автоматически подходит для контента

У меня есть разделенный контейнер с двумя панелями - довольно простая настройка, навигационное TreeView слева, ListView с элементами справа.

Теперь, что бы я хотел иметь, это сплиттер автоматически фиксируется на месте, когда все слева (древовидная структура) видимо, а горизонтальная полоса прокрутки не отображается. Я заранее не знаю размер предметов (но я знаю, что это только 1 уровень глубины). Что-то вроде «AutoGrow, а затем исправить сплиттер». Конечно, я не первый, кто ищет эту функциональность :)

Любая идея, как этого достичь?

Спасибо, Martin

ответ

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) 
Смежные вопросы