我的tablelayout面板有一列和三行。 (一個停靠在每個單元格中的填充面板上。)隱藏並顯示TableLayoutPanel的單元格
現在我希望能夠隱藏/顯示行。我希望只有一行在任何時候都可見(基於用戶對某些單選按鈕的選擇),我想調整大小以便填充TableLayoutPanel的所有區域。
我該怎麼做?有什麼想法嗎?
我的tablelayout面板有一列和三行。 (一個停靠在每個單元格中的填充面板上。)隱藏並顯示TableLayoutPanel的單元格
現在我希望能夠隱藏/顯示行。我希望只有一行在任何時候都可見(基於用戶對某些單選按鈕的選擇),我想調整大小以便填充TableLayoutPanel的所有區域。
我該怎麼做?有什麼想法嗎?
那你爲什麼要用TableLayoutPanel
?
只需在您的表格上填上三個Panel
s,填寫每一行的內容並將所有三個面板的Dock
屬性設置爲Fill
。設置兩個面板Visible = false
和一個到true
。
如果您希望看到另一個面板,只需使其可見並隱藏另外兩個面板(根據您的單選按鈕設置)即可。
如果您的TableLayoutPanel中的行被自動化,那麼隱藏內容面板將隱藏面板放置位置的單元格。
我有類似的任務來完成,我的解決方案如下:
添加一個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或絕對/百分比值,則可能是設計師問題,而非您的設計師問題。只需刪除它並重試。
我會建議其他行的高度設置爲0是最簡單的方法:
行之一:
this.tableLayoutPanel1.RowStyles[1].Height = 0;
只有當行樣式是絕對的時它才起作用。 – 2012-08-15 15:53:00
將其設置爲絕對 – SlapY 2016-02-05 12:39:34
我的情況是相似的。我需要一個帶有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();
}
試試這個
TableLayoutPanel1.ColumnStyles[1].SizeType = SizeType.Absolute;
TableLayoutPanel1.ColumnStyles[1].Width = 0;
它的ColumnStyles [1]但方法正確 – 2015-01-08 16:00:14
要隱藏行試試這個!
tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[1].Height = 0;
謝謝,它可以隱藏面板,但不是細胞..細胞仍然存在?我錯過了什麼嗎? – Bohn 2010-07-20 14:08:30
@BDotA,你確定你的行是自動化的嗎? – arbiter 2010-07-20 14:16:20
以及在TableLayoutPanel屬性框中有一個「行」屬性,我點擊它,打開另一個對話框。我的排在那裏列出。我認爲在那裏有一個CellType單選按鈕選項。所以我點擊了我的每一行,並選擇AutoSize作爲它....這就是我所做的。 – Bohn 2010-07-20 14:36:01