Скрыть и показать ячейку TableLayoutPanel - PullRequest
14 голосов
/ 20 июля 2010

Моя панель таблиц имеет один столбец и три строки.(один прикреплен к панели Fill в каждой ячейке.)

Теперь я хотел бы иметь возможность скрывать / показывать строки.Я хочу, чтобы в любой момент была видна только одна строка (на основе выбора пользователем некоторых переключателей), и я хочу, чтобы ее размер был изменен, чтобы он занимал всю область TableLayoutPanel.

Как я могу это сделать?Есть мысли?

Ответы [ 7 ]

19 голосов
/ 20 июля 2010

Если размеры строк в вашей таблице TableLayoutPanel автоматически изменяются, то скрытие панели содержимого будет скрывать ячейку, в которой расположена панель.

15 голосов
/ 25 апреля 2012

Я бы посоветовал установить для остальных высот строк значение 0, это самый простой способ:

Строка:

this.tableLayoutPanel1.RowStyles[1].Height = 0;
8 голосов
/ 23 октября 2013

Попробуйте это

TableLayoutPanel1.ColumnStyles[1].SizeType = SizeType.Absolute;
TableLayoutPanel1.ColumnStyles[1].Width = 0;
6 голосов
/ 02 сентября 2013

Мой сценарий похож.Мне нужен был TableLayoutPanel с 4 рядами, каждый из которых должен был быть виден в соответствии с выбором флажка.Таким образом, вместо того, чтобы показывать только одну строку за раз, я могу показать 1 - 4. После разработки макета с 1 столбцом и 4 строками были добавлены элементы управления, и для Dock было установлено значение Fill для каждой.Затем в одном обработчике событий CheckedChanged для флажков я кодировал, как показано ниже.Это своего рода метод грубой силы, но, эй ... это работает!

    private void checkBox_CheckedChanged(object sender, EventArgs e)
    {
        this.SuspendLayout();
        int seldCount = checkBox1.Checked ? 1 : 0;
        seldCount += checkBox2.Checked ? 1 : 0;
        seldCount += checkBox3.Checked ? 1 : 0;
        seldCount += checkBox4.Checked ? 1 : 0;

        float pcnt = 0;
        if (seldCount == 1)
            pcnt = 1;
        if (seldCount == 2)
            pcnt = 0.5f;
        if (seldCount == 3)
            pcnt = 0.33f;
        if (seldCount == 4)
            pcnt = 0.25f;

        int newHeight = (int)(tableLayoutPanel1.Height * pcnt);

        if (checkBox1.Checked)
        {
            tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Percent;
            tableLayoutPanel1.RowStyles[0].Height = newHeight;
        }
        else
        {
            tableLayoutPanel1.RowStyles[0].SizeType = SizeType.Absolute;
            tableLayoutPanel1.RowStyles[0].Height = 0;
        }

        if (checkBox2.Checked)
        {
            tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Percent;
            tableLayoutPanel1.RowStyles[1].Height = newHeight;
        }
        else
        {
            tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute;
            tableLayoutPanel1.RowStyles[1].Height = 0;
        }

        if (checkBox3.Checked)
        {
            tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Percent;
            tableLayoutPanel1.RowStyles[2].Height = newHeight;
        }
        else
        {
            tableLayoutPanel1.RowStyles[2].SizeType = SizeType.Absolute;
            tableLayoutPanel1.RowStyles[2].Height = 0;
        }

        if (checkBox4.Checked)
        {
            tableLayoutPanel1.RowStyles[3].SizeType = SizeType.Percent;
            tableLayoutPanel1.RowStyles[3].Height = newHeight;
        }
        else
        {
            tableLayoutPanel1.RowStyles[3].SizeType = SizeType.Absolute;
            tableLayoutPanel1.RowStyles[3].Height = 0;
        }
        this.ResumeLayout();
    }
5 голосов
/ 20 июля 2010

Итак, почему вы использовали TableLayoutPanel?

Просто поместите три Panel s в вашу форму, заполните все содержимое каждой строки и установите свойство Dock всех трех панелей вFill.Установите две панели Visible = false и одну на true.

Если вы хотите увидеть другую панель, просто сделайте ее видимой и скройте две другие (в зависимости от настроек переключателя).

3 голосов
/ 11 января 2018

Чтобы скрыть строку, попробуйте это!

tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[1].Height = 0;
3 голосов
/ 14 января 2012

У меня была похожая задача, и мое решение следующее:

Добавьте TableLayoutPanel к вашей форме (или любому контейнеру).

Установить количество столбцов и строк TableLayoutPanel в 1 и размер до 100%.

Установить Dock на Fill.

Установить GrowStyle на fixedSize.

Установить AutoSizeв true.

Затем программно добавьте все три формы / элементы управления, одну из которых вы должны показать в зависимости от выбора переключателя.Убедитесь, что виден только один из них.Это может быть сделано с начальным FirstControl.Show ();а затем при каждом событии RadioButton скрыть текущее и показать другое.вы можете «запомнить» в локальной переменной (скажем: «nowVisibleControl» ссылку, которая видна в данный момент)

примечание: если вы захотите .Show () более одного за раз.затем TableLayoutPanel сработает за исключением того, что он заполнен и не может больше добавлять элемент.

PS В моем собственном примере у меня есть TableLayoutPanel в окне MDI и три формы, которые заменяют друг друга при нажатии на них, поэтому ядумаю, копирование моего исходного кода усложнит «устный» пример.

PPS Из моего опыта Visual Studio иногда делает странные вещи в режиме дизайна.Мне пришлось удалить и повторно добавить TableLayoutPanel, чтобы правильно установить свойства и получить результаты как в конструкторе, так и во время выполнения.Поэтому, если на экране дизайнера не отображаются значения autosize или absolute / процентные значения, это может быть проблемой для проектировщика, а не для вас.ПРОСТО УДАЛИТЕ ЭТО И ПЫТАЙТЕСЬ.

...