[英]Hide and show a cell of the TableLayoutPanel
我的tablelayout面板有一列三行。 (一個停靠在每個單元格中的“填充”面板。)
現在我希望能夠隱藏/顯示行。 我希望任何時候只能看到一行(根據用戶選擇的一些單選按鈕),我想調整大小,以便填充TableLayoutPanel的所有區域。
我怎樣才能做到這一點? 有什么想法嗎?
如果TableLayoutPanel中的行已自動調整,則隱藏內容面板將隱藏面板放置的單元格。
我建議將其他行高度設置為0是最簡單的方法:
第一行:
this.tableLayoutPanel1.RowStyles[1].Height = 0;
試試這個
TableLayoutPanel1.ColumnStyles[1].SizeType = SizeType.Absolute;
TableLayoutPanel1.ColumnStyles[1].Width = 0;
我的情況類似。 我需要一個包含4行的TableLayoutPanel,每行需要根據復選框選擇顯示。 因此,我不是一次只顯示一行,而是顯示1 - 4.在設計了1列和4行的布局后,添加了控件並將Dock設置為Fill for each。 然后在復選框的單個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
?
只需在表單上放置三個Panel
,將每行的內容填入所有內容,並將所有三個面板的Dock
屬性設置為Fill
。 將兩個面板設置為Visible = false
,將一個面板設置為true
。
如果您想看另一個面板,只需將其顯示並隱藏另外兩個面板(基於您的單選按鈕設置)。
要隱藏行嘗試這個!!
tableLayoutPanel1.RowStyles[1].SizeType = SizeType.Absolute;
tableLayoutPanel1.RowStyles[1].Height = 0;
我有類似的任務要做,我的解決方案如下:
將TableLayoutPanel添加到表單(或任何容器)。
將TableLayoutPanel的列和行設置為1,將大小設置為100%。
將Dock設置為Fill。
將GrowStyle設置為fixedSize。
將AutoSize設置為true。
然后以編程方式添加所有三個窗體/控件,其中一個您必須根據單選按鈕選擇顯示。 確保只有其中一個可見。 這可以通過初始FirstControl.Show(); 然后在每個RadioButton事件中隱藏當前的一個並顯示另一個。 你可以在本地變量中“記住”(例如:“currentVisibleControl”當前可見的參考)
注意:如果你將.Show()不止一次。 然后TableLayoutPanel將觸發它已滿的異常,並且無法再添加任何項目。
PS在我自己的例子中,我在MDI窗口中有TableLayoutPanel和三個在按鈕點擊時互相替換的表單,所以我認為復制我的源代碼會使“口頭”示例變得復雜。
PPS根據我的經驗,Visual Studio有時會在設計模式中做一些奇怪的事情。 我必須刪除並重新添加TableLayoutPanel以正確設置屬性並在設計器和運行時獲得結果。 因此,如果在設計器屏幕上沒有描繪自動調整大小或絕對/百分比值,則可能是設計師問題而不是您的問題。 只是刪除它和重試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.