Скрыть и показать ячейку TableLayoutPanel
моя панель tablelayout имеет один столбец и три строки. (один закреплен, чтобы заполнить панель в каждой ячейке.)
теперь я хотел бы иметь возможность скрывать/показывать строки . Я хочу, чтобы только одна строка была видна в любое время ( на основе выбора пользователем некоторых переключателей), и я хочу, чтобы она была изменена, чтобы она заполняла всю область TableLayoutPanel.
Как я могу это сделать? Есть мысли?
7 ответов
так почему же вы использовали TableLayoutPanel
?
просто поставить три Panel
s на вашей форме, заполните все содержимое каждой строки и установите 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;