gpt4 book ai didi

vb.net - 动态 TreeView 高度

转载 作者:行者123 更新时间:2023-12-01 02:26:06 26 4
gpt4 key购买 nike

当我加载它时,我的 TreeView 折叠起来,所以它大约有 100x150 像素大。展开时,我希望 TreeView 显示所有展开的节点。

为了做到这一点,随着 TreeView 变大,表单需要变大,对吗?我是 VB.net 的新手,我试图在 TreeView 中找到一个“GrowOnly”属性,但我找不到……有没有人做过这个?

最佳答案

处理 AfterExpand/AfterCollapse 事件

添加事件处理程序 AfterExpand 和 AfterCollapse 以使 TreeView 对节点的展开/折叠使用react。我硬编码填充这个例子,但本质上这是菜单,按钮等,将被用来调整窗体的只是高度。

Private Sub Rapports_tvAllReports_AfterExpand(sender As Object, e As System.Windows.Forms.TreeViewEventArgs) Handles Rapports_tvAllReports.AfterExpand, Rapports_tvAllReports.AfterCollapse
Dim Padding As Integer = 140 'Customize this, basically accounts for all buttons or menus included in the form which nests the treeview
Dim TreeViewHeight As Integer = GetOpenedNodesRecursively(Rapports_tvAllReports)

If formWindow = FormWindowState.Normal Then Me.Size = New Size(345, TreeViewHeight + Padding)
End Sub

我们所做的就是增加 Y 并将新的 Y 设置为表单。为了 TreeView 与表单一起正确调整大小, anchor 顶部和底部 .

递归遍历节点

该函数将遍历根节点并在打开的节点上调用递归函数。
Private Function GetOpenedNodesRecursively(ByVal aTreeView As TreeView)
Dim Y As Integer = 0

'Go through each node of the treeview (first level)
For Each n As TreeNode In aTreeView.Nodes
Y += Rapports_tvAllReports.ItemHeight

'If the user expands a node, recursively increment the Y
If n.IsExpanded Then Y += RecursiveYIncrement(n)
Next

Return Y
End Function

现在只需使用递归函数继续增加 TreeViewHeight,该函数将返回在当前 TreeView 中展开的所有节点的高度 (Y)。
Private Function RecursiveYIncrement(ByVal n As TreeNode)
Dim Y As Integer = 0

'Go through each node of the treeview (first level)
For Each aNode As TreeNode In n.Nodes
Y += Rapports_tvAllReports.ItemHeight

'If the user expands a node, recursively increment the Y
If aNode.IsExpanded Then Y += RecursiveYIncrement(aNode)
Next

Return Y
End Function

视觉再现

这是我们完成后的样子:

我们从一个折叠的 TreeView 开始

Collapsed

然后我们可以展开一些节点,表格会相应地增长
Expanded

然后我们可以重新折叠节点并展开更多,形式再次调整!
Collapsed again

请原谅我截图中的法语,这是魁北克的常态......我们有义务这样做!

关于vb.net - 动态 TreeView 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16320522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com