Але*_* Д. 16 c# tablelayoutpanel winforms
我有一个tablelayoutpanel.2x2 - 2列2行.
例如,我在第1行第二列中添加了一个按钮button1.button1的dock属性设置为Fill.VS Designer允许设置button1的列/行范围属性.
我希望可用性以编程方式更改button1的 行跨度属性,因此它可以填充所有第二列(1行和第2行)和可用性以将其设置回来.
怎么样?
Oli*_*ver 28
这段代码怎么样?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
虽然我认为当前的投票答案很充分,但看起来也比需要的稍微混乱。在设置控件的属性之前,必须将其添加到tableLayoutPanel中。
Visual Studio(2013年以及其他可能的版本)会将这些属性显示为控件的一部分。实际上,它们是tableLayoutPanel的一部分。
说明:
tableLayoutPanel.Controls.Add(**control**, x, y)
tableLayoutPanel.SetColumnSpan(**control**, '# of cols to span')
Run Code Online (Sandbox Code Playgroud)
例:
tableLayoutPanel1.Controls.Add(**button1**, 0, 0);
tableLayoutPanel1.SetColumnSpan(**button1**, 2);
tableLayoutPanel1.SetRowSpan(**button1**, 3);
Run Code Online (Sandbox Code Playgroud)
结果:一个“占据”该空间的按钮。(提供的空间足以覆盖该区域。即使它没有“覆盖”空间,也仍然会“保留”它。)
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
Run Code Online (Sandbox Code Playgroud)
将跨度设置为大于网格大小将..:不会更改网格大小。不要将数字裁剪/编辑为网格大小。不要在编译时抛出错误。
它会像跨度设置为当前网格(tableLayoutPanel)的最大大小一样执行/执行。仅当TLP /电网尺寸改变时,这才有意义。
如果以编程方式将两个控件添加到两个相同的网格位置,则网格中的第一个控件将保留其位置。随后添加的任何控件都将推送到下一个单元块。如果添加了“ span”,它将将该单元块视为已使用,并继续搜索未使用的单元块。
例如:将label1,label2和label3加到0,0。
示例2:标签1的行跨度为2。
选择正确的网格点和跨度后,即可使用停靠和锚点属性进一步优化布局。