2010-07-20 2 views
13

В моей панели tablelayout есть один столбец и три строки. (одна прикреплена к панели «Заливка» в каждой ячейке.)Скрыть и показать ячейку таблицыLayoutPanel

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

Как я могу это сделать? Есть предположения?

ответ

5

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

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

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

18

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

+0

спасибо, он может скрыть панель, но не ячейка .. ячейка все еще там? Я что-то упускаю? – Bohn

+3

@BDotA, вы уверены, что ваш ряд авторизован? – arbiter

+1

ну, в окне свойств TableLayoutPanel было свойство Rows, я нажал на него, открылось другое диалоговое окно. мои строки были перечислены там. там были варианты переключателей CellType, которые я думаю. поэтому я нажал на каждую из своих строк и выбрал AutoSize для этого ... это то, что я сделал. – Bohn

3

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

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

Столбцы и строки таблицы TableLayoutPanel подсчитываются до 1 и до 100%.

Комплект док-станции для заполнения.

Set GrowStyle to fixedSize.

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

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

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

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

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

12

Я хотел бы предложить создание других рядов высот до 0 является самым простым способом:

Row один:

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

Он будет работать, только если стиль строки является абсолютным. –

+2

установить его в абсолютный – SlapY

6

Мой сценарий похож.Мне нужна таблица 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(); 
    } 
7

Попробуйте

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

Это ColumnStyles [1], но метод прав –

1

Чтобы скрыть строку попробовать это !!

tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute; 
tableLayoutPanel1.RowStyles[1].Height = 0; 
Смежные вопросы