Изменение размера TableLayoutPanels, когда строка свернута / скрыта - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть форма, которая имеет TableLayoutPanel с 6 строками, подобными этой:

default view

Каждое событие Label MouseClick переключает видимое свойство панели ниже это (который находится в отдельной строке).

Что делает его похожим на это:

top panel collapsed

Как вы можете видеть только последняя строка расширяется вверх, чтобы заполнить теперь доступное пространство.

Если я сверну нижнюю или среднюю строку, строки, расположенные выше, не расширятся вниз:

bottom panel collapsed

Как мне сделать следующее:

  • Видимые строки будут расширяться в равной степени, чтобы заполнить доступное пространство
  • Строки будут перемещаться / расширяться вниз

Я пробовал всевозможные комбинации со свойствами строки Absolute / Percent / AutoSize ... Но предположить, что для этого может потребоваться расширение класса TableLayoutPanel?

1 Ответ

1 голос
/ 10 февраля 2020

Я думаю, что у меня есть рабочий пример.

Поместите панель на форму и закрепите ее во всех направлениях.

Поместите табличную панель в панель, установите любой размер и закрепите все направления .

Поместить метки в строки 0, 2, 4. Установить метку autosize = true.

Поместить панели в строки 1, 3, 5. Закрепить панели во всех направлениях. Нет стыковки или автоматического изменения размера.

Установите строки таблицы табличного изображения с метками на абсолютную и любую высоту. Я использовал 20 пикселей.

Установите для строк панели значение «Процент 33,33». Таблица автоматически масштабируется до 100%, если вам меньше или больше.

Отметить события щелчка:

 Public Class Form1

    Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click


        If TableLayoutPanel1.RowStyles(1).Height > 10 Then
            TableLayoutPanel1.RowStyles(1).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(1).Height = 2
        Else
            TableLayoutPanel1.RowStyles(1).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(1).Height = 33.33
        End If

    End Sub

    Private Sub Label2_Click(sender As System.Object, e As System.EventArgs) Handles Label2.Click

        If TableLayoutPanel1.RowStyles(3).Height > 10 Then
            TableLayoutPanel1.RowStyles(3).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(3).Height = 2
        Else
            TableLayoutPanel1.RowStyles(3).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(3).Height = 33.33
        End If
    End Sub

    Private Sub Label3_Click(sender As System.Object, e As System.EventArgs) Handles Label3.Click

        If TableLayoutPanel1.RowStyles(5).Height > 10 Then
            TableLayoutPanel1.RowStyles(5).SizeType = SizeType.Absolute
            TableLayoutPanel1.RowStyles(5).Height = 2
        Else
            TableLayoutPanel1.RowStyles(5).SizeType = SizeType.Percent
            TableLayoutPanel1.RowStyles(5).Height = 33.33
        End If
    End Sub
End Class

Я не знаю, нужно ли поместить его на панель заставить это работать. Возможно, вы могли бы привязать его к форме и все будет в порядке.

Вы также можете сделать это в одном обработчике событий, щелкнув строку метки и добавив 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...