[英]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',它將把該單元塊視為已使用並繼續搜索未使用的單元塊。
例如: label1 , label2和label3被添加到0,0。
例2:標簽1的行跨度為2。
選擇正確的網格點和跨度后,可以使用停靠欄和錨點屬性進一步優化布局。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.