如何计算和更改树视图宽度

问题描述 投票:0回答:3

如何让节点展开时

TreeView
改变宽度,使节点的标签完全显示出来。

首先我设置

DrawMode = OwnerDrawAll;

然后处理事件

DrawNode
并在处理程序中

e.DrawDefault = true;
currentWith_ = Math.Max(currentWith_, e.Node.Bounds.Right);

然后在

AfterExpand
中设置控件。但并不是每次都有效。有时 with 没有更改或更改不正确。

如何纠正这个问题。 预先感谢。

c# winforms user-interface treeview
3个回答
5
投票

试试这个,成功了:

private void treeViewAfterExpand(object sender, TreeViewEventArgs e)
{
    int maxRight = treeView.ClientSize.Width;

    if(e.Node.Nodes != null)
        foreach (TreeNode node in e.Node.Nodes)
        {
            maxRight = Math.Max(maxRight, node.Bounds.Right);
        }

    treeView.ClientSize = new Size(maxRight, treeView.ClientSize.Height);
}

1
投票

Ria给出的解决方案有效,但在构造函数中扩展时无效。在加载事件而不是构造函数中扩展使其工作。 (无法评论,因为低于 50 分。)


0
投票

考虑隐藏节点的解决方案。

假设您的 TreeView (tvSamples) 位于 SplitContainer (scPaths) 中,并且您希望在表单调整大小时调整 SplitContainer 的宽度以适合 TreeView 的内容:

 Private TREEVIEWPADDING As Integer = 10
 Private Sub treeViewAfterExpand(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles tvSamples.AfterExpand

     scTree.SplitterDistance = TreeViewWidth(tvSamples.Nodes, 0) + TREEVIEWPADDING

 End Sub
 Private Function TreeViewWidth(node As TreeNode, maxwidth As Integer) As Integer

     If node.IsVisible Then
         If node.Nodes IsNot Nothing Then
             Return Max(maxwidth, TreeViewWidth(node.Nodes, maxwidth))
         Else
             Return Max(maxwidth, node.Bounds.Right)
         End If
     Else
         Return maxwidth
     End If

 End Function
 Private Function TreeViewWidth(nodes As TreeNodeCollection, maxwidth As Integer) As Integer

     Dim result As Integer = maxwidth
     For Each node As TreeNode In nodes
         If node.IsVisible Then
             result = Max(result, TreeViewWidth(node, node.Bounds.Right))
         End If
     Next
     Return result

 End Function
 Private Sub Form1_ResizeEnd(sender As Object, e As EventArgs) Handles Me.ResizeEnd

     scTree.SplitterDistance = TreeViewWidth(tvSamples.Nodes, 0) + scPaths.SplitterWidth + TREEVIEWPADDING

 End Sub
© www.soinside.com 2019 - 2024. All rights reserved.