Скрыть и показать ячейку TableLayoutPanel

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

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

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

7 ответов


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

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

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


Если строк в tablelayoutpanel является autosized потом прячется панель Содержание скрыть ячейки, где панель тоже разместил.


Я бы предложил установить другие высоты строк в 0-самый простой способ:

строку:

this.tableLayoutPanel1.RowStyles[1].Height = 0;

попробуй такое

TableLayoutPanel1.ColumnStyles[1].SizeType = SizeType.Absolute;
TableLayoutPanel1.ColumnStyles[1].Width = 0;

мой сценарий похож. Мне нужна TableLayoutPanel с 4 строками, каждая из которых должна быть видимой в соответствии с выбором флажка. Поэтому вместо того, чтобы показывать только одну строку за раз, я могу показать 1 - 4. После разработки макета с 1 столбцом и 4 строками были добавлены элементы управления и док-станция для заполнения для каждого из них. Затем в одном обработчике событий 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();
    }

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

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

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

установить Dock значение Fill.

установите GrowStyle в fixedSize.

установите для параметра AutoSize значение true.

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

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

P. S. В своем примере я tablelayoutpanel в окно MDI и три формы, которые заменяют друг друга при нажатии на кнопку, поэтому я думаю, что копирование моего исходного кода усложнит "вербальный" пример.

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


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

tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[1].Height = 0;