簡體   English   中英

以編程方式更改行/列范圍(tablelayoutpanel)

[英]Change row/column span programmatically (tablelayoutpanel)

我有一個tablelayoutpanel。 2x2 - 2列2行。

例如,我在第1行第二列中添加了一個按鈕button1 button1的dock屬性設置為Fill。 VS Designer允許設置button1的列/行范圍屬性。

我希望可用性以編程方式更改button1的行跨度屬性,因此它可以填充所有第二列(1行和第2行)和可用性以將其設置回來。

怎么樣?

這段代碼怎么樣?

private void button1_Click(object sender, EventArgs e)
{
    var control = sender as Control;

    if(control == null)
        return;

    if (1 == tableLayoutPanel1.GetRowSpan(control))
    {
        tableLayoutPanel1.SetRowSpan(control, 2);
    }
    else
    {
        tableLayoutPanel1.SetRowSpan(control, 1);
    }
}

雖然我發現當前最高投票的答案相當充分,但它看起來也比需要的稍微麻煩一些。 在設置其屬性之前,必須將控件添加到tableLayoutPanel。

Visual Studio(2013和可能的其他版本)將這些屬性顯示為控件的一部分。 實際上,它們是tableLayoutPanel的一部分。

說明:

tableLayoutPanel.Controls.Add(**control**, x, y)
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span')

例:

tableLayoutPanel1.Controls.Add(**button1**, 0, 0);
tableLayoutPanel1.SetColumnSpan(**button1**, 2);
tableLayoutPanel1.SetRowSpan(**button1**, 3);

結果:一個“占據”此空間的按鈕。 (如果它足夠大以覆蓋該區域。即使它沒有“覆蓋”該空間,它仍然會“保留”它。)

O O X X X
O O X X X
O O X X X
X X X X X
X X X X X

將跨度設置為大於網格的大小將...:不更改網格大小。 不裁剪/編輯網格大小的數字。 不要在編譯時拋出錯誤。

它將執行/執行,就好像跨度設置為當前網格(tableLayoutPanel)的最大大小。 這僅在TLP /網格大小更改時才相關。

如果以編程方式將兩個控件添加到兩個相同的網格位置,則網格中的第一個控件將保持其位置。 隨后添加的任何控件都會被推送到下一個單元塊。 如果添加'span',它將把該單元塊視為已使用並繼續搜索未使用的單元塊。

例如: label1label2label3被添加到0,0。

  • label1將出現在0,0中
  • label2 :0,1
  • label3 :0,2

例2:標簽1的行跨度為2。

  • label1 :0,0
  • label2 :重新定位到0.2
  • label3 :0,3

選擇正確的網格點和跨度后,可以使用停靠欄和錨點屬性進一步優化布局。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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