2010-07-20 17 views
13

Mój panel tablelayout ma jedną kolumnę i trzy wiersze. (jedno dokowane do panelu Wypełnienie w każdej komórce.)Ukrywanie i wyświetlanie komórki tabeli TableLayoutPanel

Teraz chciałbym móc ukryć/wyświetlić wiersze. Chcę, aby w danym momencie był widoczny tylko jeden wiersz (na podstawie wybranych przez użytkownika niektórych przycisków opcji) i chcę zmienić rozmiar tak, aby wypełniał cały obszar TableLayoutPanel.

Jak mogę to zrobić? jakieś pomysły?

Odpowiedz

5

Dlaczego więc używasz TableLayoutPanel?

Wystarczy umieścić trzy Panel s w formularzu, wypełnić wszystkie treści każdego wiersza i ustawić właściwość Dock wszystkich trzech paneli na Fill. Ustaw dwa panele: Visible = false i jeden do true.

Jeśli chcesz zobaczyć inny panel, po prostu zaznacz go i ukryj pozostałe dwa (w oparciu o ustawienia twojego przycisku opcji).

18

Jeśli wiersze w twoim TableLayoutPanel są autosizualizowane, ukrywanie panelu treści spowoduje ukrycie komórki, w której umieszczono także panel.

+0

dzięki, może ukryć panel, ale komórka Cell .. nadal tam jest? Czy czegoś brakuje? – Bohn

+3

@BDotA, czy jesteś pewien, że twój wiersz jest autosize? – arbiter

+1

dobrze w polu właściwości TableLayoutPanel była właściwość "Wiersze", kliknąłem na nią, otworzyło się kolejne okno dialogowe. moje wiersze zostały tam wymienione. były tam opcje przycisków radiowych CellType. więc kliknąłem na każdy z moich wierszy i wybrałem dla niego AutoSize .... to jest to, co zrobiłem. – Bohn

3

miałem podobne zadanie do zrobienia i moje rozwiązanie jest następujące:

Dodaj TableLayoutPanel do formularza (lub jakimkolwiek pojemniku).

Ustaw kolumny i wiersze TableLayoutPanel na 1 i zmień na 100%.

Zestaw doków do napełnienia.

Ustaw GrowStyle na fixedSize.

Ustaw AutoSize na true.

Następnie należy dodać wszystkie trzy formularze/formanty, z których jeden musi być wyświetlany w zależności od wyboru przycisku opcji. Upewnij się, że tylko jeden z nich jest widoczny. Można to zrobić za pomocą pierwszej funkcji FirstControl.Show(); a następnie w każdym zdarzeniu RadioButton ukryj bieżący i pokaż inny. możesz "zapamiętać" w zmiennej lokalnej (powiedz: "obecnieVisibleControl" referencję, która jest obecnie widoczna)

uwaga: jeśli będziesz .Pokaż() więcej niż jeden na raz. następnie TableLayoutPanel uruchomi wyjątek, że jest pełny i nie może dodać więcej.

P.S. W moim przykładzie mam TableLayoutPanel w oknie MDI i trzy formularze, które zastępują się nawzajem za pomocą kliknięć przycisków, więc myślę, że skopiowanie mojego kodu źródłowego komplikuje "słowny" przykład.

P.P.S. Z mojego doświadczenia wynika, że ​​Visual Studio czasami robi dziwne rzeczy w trybie projektowania. Musiałem usunąć i ponownie dodać TableLayoutPanel, aby poprawnie ustawić właściwości i uzyskać wyniki zarówno projektanta, jak i środowiska wykonawczego. Więc jeśli albo autosize, albo wartości bezwzględne/procentowe nie są przedstawione na ekranie projektanta, może to być raczej problem projektantów niż twoich. PO PROSTU USUŃ GO I PONOWNIE.

12

Proponuję ustalania wysokości innych wierszy na 0 to najprostszy sposób:

Row jeden:

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

Będzie działać tylko wtedy, gdy styl wiersza jest bezwzględny. –

+2

ustaw go na wartość absolutną – SlapY

6

Mój scenariusz jest podobny.Potrzebowałem TableLayoutPanel z 4 rzędami, z których każdy musiał być widoczny zgodnie z wyborem pola wyboru. Dlatego zamiast pokazywać tylko jeden wiersz na raz, mogę pokazać 1 - 4. Po zaprojektowaniu układu z 1 kolumną i 4 wierszami dodano elementy sterujące, a dla każdego z nich Dock ustawiono opcję Wypełnij. Następnie w jednym module obsługi zdarzenia CheckedChanged dla pól wyboru, zakodowałem jak pokazano poniżej. To rodzaj brutalnej metody, ale Hej ... działa!

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

Spróbuj

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

To ColumnStyles [1], ale metoda jest właściwa –

1

Aby ukryć wiersz spróbować !!

tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute; 
tableLayoutPanel1.RowStyles[1].Height = 0; 
Powiązane problemy