2010-07-20 278 views
13

我的tablelayout面板有一列和三行。 (一個停靠在每個單元格中的填充面板上。)隱藏並顯示TableLayoutPanel的單元格

現在我希望能夠隱藏/顯示行。我希望只有一行在任何時候都可見(基於用戶對某些單選按鈕的選擇),我想調整大小以便填充TableLayoutPanel的所有區域。

我該怎麼做?有什麼想法嗎?

回答

5

那你爲什麼要用TableLayoutPanel

只需在您的表格上填上三個Panel s,填寫每一行的內容並將所有三個面板的Dock屬性設置爲Fill。設置兩個面板Visible = false和一個到true

如果您希望看到另一個面板,只需使其可見並隱藏另外兩個面板(根據您的單選按鈕設置)即可。

18

如果您的TableLayoutPanel中的行被自動化,那麼隱藏內容面板將隱藏面板放置位置的單元格。

+0

謝謝,它可以隱藏面板,但不是細胞..細胞仍然存在?我錯過了什麼嗎? – Bohn 2010-07-20 14:08:30

+3

@BDotA,你確定你的行是自動化的嗎? – arbiter 2010-07-20 14:16:20

+1

以及在TableLayoutPanel屬性框中有一個「行」屬性,我點擊它,打開另一個對話框。我的排在那裏列出。我認爲在那裏有一個CellType單選按鈕選項。所以我點擊了我的每一行,並選擇AutoSize作爲它....這就是我所做的。 – Bohn 2010-07-20 14:36:01

3

我有類似的任務來完成,我的解決方案如下:

添加一個TableLayoutPanel到窗體(或任何容器)。

將TableLayoutPanel的列和行數設置爲1並將大小設置爲100%。

設置碼頭填充。

將GrowStyle設置爲fixedSize。

將AutoSize設置爲true。

然後以編程方式添加的三種形式/控制,其中一個必須取決於單選按鈕選擇顯示所有。確保只有其中一個可見。這可以通過初始的FirstControl.Show()來完成。然後在每個RadioButton事件上隱藏當前的並顯示另一個。你可以「記住」在局部變量(比如:「currentlyVisibleControl」這是目前看到的參考)

注意:如果你將.Show()一個以上的時間。那麼TableLayoutPanel將激發它已滿並且不能添加任何更多項目的異常。

P.S.在我自己的例子中,我在MDI窗口中有TableLayoutPanel和三種形式,它們互相替換按鈕上的按鈕,所以我認爲複製我的源代碼會使「口頭」示例複雜化。

P.P.S.從我的經驗來看,Visual Studio有時會在設計模式中做一些奇怪的事情。我必須刪除並重新添加TableLayoutPanel才能正確設置屬性,並在設計器和運行時獲取結果。因此,如果在設計器屏幕上未顯示autosize或絕對/百分比值,則可能是設計師問題,而非您的設計師問題。只需刪除它並重試。

12

我會建議其他行的高度設置爲0是最簡單的方法:

行之一:

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

只有當行樣式是絕對的時它才起作用。 – 2012-08-15 15:53:00

+2

將其設置爲絕對 – SlapY 2016-02-05 12:39:34

6

我的情況是相似的。我需要一個帶有4行的TableLayoutPanel,根據複選框的選擇,每個行都需要可見。因此,而不是一次只顯示一行,我可以顯示1 - 4. 在設計1列和4行佈局後,添加控件並將Dock設置爲填充每個。 然後在複選框的單個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]但方法正確 – 2015-01-08 16:00:14

1

要隱藏行試試這個!

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