首页 > 解决方案 > 意外的 TableLayoutPanel 行为

问题描述

嗨,自定义控件中的一些嵌套表格布局面板存在一些问题 我在表格布局面板中的表格布局面板中有一个表格布局面板 我知道很疯狂,但它保持统一和有序

自定义控件由 2 个表格布局面板组成,它们放置在表格的表格布局面板中并在我的主要表单的预览区域中。

在设计时设置它们可以正常工作,但是动态地将具有 1 行 2 列的最顶层的添加/删除到它下面的只有 1 列和 x 行的行中似乎打破了我正在追逐的自动调整大小的行为。
所以我希望单元格和行根据本例标签中的内容自动调整大小,但仍保持整洁有序的布局

控件层次结构中的任何地方都没有停靠,只是在这里和那里锚定这是我在
https://i.stack.imgur.com/vRfhE.png ”下面添加表格布局面板的代码



Private Sub AddControl(ByRef Counter As Counter)
        Dim Gpanel As New TableLayoutPanel
        Dim tlabel As New Label
        Dim clabel As New Label
        Dim pad As Integer = Counter.Cpad

        TLPanel.AutoSizeMode = AutoSizeMode.GrowAndShrink
        Gpanel.AutoSizeMode = AutoSizeMode.GrowAndShrink
        Gpanel.AutoSize = True
        Gpanel.GrowStyle = TableLayoutPanelGrowStyle.AddRows
        Gpanel.BorderStyle = BorderStyle.FixedSingle
        Gpanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset
        TLPanel.BorderStyle = BorderStyle.FixedSingle
        Gpanel.Dock = DockStyle.None
        Gpanel.Padding = New Padding(0)
        Gpanel.Anchor = AnchorStyles.Top Or AnchorStyles.Left
        Gpanel.BackColor = Color.Transparent
        Gpanel.RowCount = 1
        Gpanel.ColumnCount = 2
        Gpanel.RowStyles.Add(New RowStyle(SizeType.AutoSize))
        Gpanel.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize))
        Gpanel.ColumnStyles.Add(New ColumnStyle(SizeType.AutoSize))
        tlabel.Dock = DockStyle.None
        clabel.Dock = DockStyle.None
        tlabel.GetPreferredSize(Size.Empty)
        clabel.GetPreferredSize(Size.Empty)
        tlabel.Text = Counter.Clabel
        clabel.Text = Counter.Ccount.ToString
        tlabel.Padding = New Padding(pad)
        clabel.Padding = New Padding(pad)
        tlabel.Anchor = AnchorStyles.None
        clabel.Anchor = AnchorStyles.None
        tlabel.ForeColor = Color.FromName(Counter.Clcolor)
        clabel.ForeColor = Color.FromName(Counter.Ccolor)
        Dim fontstyle As New FontStyle
        fontstyle = Counter.ClfontStyle
        tlabel.Font = New Font(Counter.Clfont, Counter.Clfontsize, fontstyle)
        fontstyle = Counter.CcfontStyle
        clabel.Font = New Font(Counter.Ccfont, Counter.Ccfontsize, fontstyle)
        Gpanel.Controls.Add(tlabel, 0, 0)
        Gpanel.Controls.Add(clabel, 1, 0)


        TLPanel.Controls.Add(Gpanel, 0, Counter.ID)

        TLPanel.RowCount += 1
        TLPanel.RowStyles.Add(New RowStyle(SizeType.AutoSize))
        Dim Styles As TableLayoutRowStyleCollection = TLPanel.RowStyles
        Dim Cstyles As TableLayoutColumnStyleCollection = Gpanel.ColumnStyles
        Gpanel.RowStyles.Item(0) = New RowStyle(SizeType.AutoSize)

        TLPanel.ColumnStyles.Item(0) = New ColumnStyle(SizeType.AutoSize)
        For i = 0 To Cstyles.Count - 1
            Cstyles.Item(i) = New ColumnStyle(SizeType.AutoSize)
        Next
        For i = 0 To Styles.Count - 1
            Styles.Item(i) = New RowStyle(SizeType.AutoSize)
        Next
        TLPanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Inset
        AutoSize = True
        AutoSizeMode = AutoSizeMode.GrowAndShrink

    End Sub
'

标签: vb.netwinformstablelayoutpanel

解决方案


推荐阅读