簡體   English   中英

隱藏並顯示TableLayoutPanel的單元格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM