Неожиданное поведение TableLayoutPanel Behavour - PullRequest
0 голосов
/ 19 января 2020

Привет, у меня возникли проблемы с некоторыми вложенными панелями табличных таблиц в пользовательском элементе управления. У меня есть табличная табличка в табличной панели в табличной табличке. Сумасшедший, я знаю, что он остается единообразным и упорядоченным

Настраиваемый элемент управления состоит из 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
'
...