我有一个表格布局面板。2x2 - 2 列 2 行。
例如,我在 1 行第二列中添加了一个按钮button1 。button1的停靠属性设置为 Fill。VS Designer 允许设置button1的列/行跨度属性。
我想要以编程方式更改button1 的行跨度属性的可用性,因此它可以填充所有第二列(1 行和第二行)并且可以将其设置回来。
如何?
我有一个表格布局面板。2x2 - 2 列 2 行。
例如,我在 1 行第二列中添加了一个按钮button1 。button1的停靠属性设置为 Fill。VS Designer 允许设置button1的列/行跨度属性。
我想要以编程方式更改button1 的行跨度属性的可用性,因此它可以填充所有第二列(1 行和第二行)并且可以将其设置回来。
如何?
这段代码呢?
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/网格大小发生变化时才有意义。
如果您以编程方式将两个控件添加到相同的网格位置,则网格中的第一个控件将保留其位置。任何随后添加的控件都会被推送到下一个单元块。如果添加了“跨度”,它将将该单元块视为已使用并继续搜索未使用的单元块。
例如:label1、label2和label3添加到 0,0。
例 2:标签 1 的行跨度为 2。
选择正确的网格点和跨度后,您可以使用停靠和锚点属性进一步优化布局。