我正在寻找非常简单的功能,但是我找不到它(令人惊讶的是,我找不到其他人问这个问题)。
我有带有两个面板的拆分容器 - 设置非常简单,左侧是导航 TreeView,右侧是带有项目的 ListView。
现在,我想要的是当左侧的所有内容(树视图)可见并且不显示水平滚动条时,拆分器会自动固定在位置上。我事先不知道项目的大小(但我知道它只有 1 级深)。像“AutoGrow 然后修复拆分器”之类的东西。当然,我不是第一个正在寻找此功能的人 :)
知道如何实现这一目标吗?
谢谢,马丁
我正在寻找非常简单的功能,但是我找不到它(令人惊讶的是,我找不到其他人问这个问题)。
我有带有两个面板的拆分容器 - 设置非常简单,左侧是导航 TreeView,右侧是带有项目的 ListView。
现在,我想要的是当左侧的所有内容(树视图)可见并且不显示水平滚动条时,拆分器会自动固定在位置上。我事先不知道项目的大小(但我知道它只有 1 级深)。像“AutoGrow 然后修复拆分器”之类的东西。当然,我不是第一个正在寻找此功能的人 :)
知道如何实现这一目标吗?
谢谢,马丁
这相当麻烦,滚动条可能会随着用户展开和折叠节点而再次出现和消失。您只能测量扩展节点的大小。但是,您使用的 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)