以编程方式设置 row/column 跨度

set row/column span programmatically

我正在尝试创建一个动态布局来显示数据库中的数据,因为我正在使用一个 tablelayoutpanel 并且我将它放到了它把数据放在我想要它去的字段中的位置,但是我可以'弄清楚我将如何为某些字段提供行或列跨度,因为其中一些需要遍历多个字段

这是我用来创建需要 columnspan 的标签之一的代码

tableLayoutPanel1.Controls.Add(new Label()
{ Text = stat, Dock = DockStyle.Fill, BackColor = Color.Green, AutoSize = true }
, 7, row);

我在 SO 上搜索了一个解决方案,我确实找到了一些可以设置 columnspan 的解决方案,但它们不能与我创建标签的方式一起使用。

tableLayoutPanel1.SetRowSpan([control name],[rowspan] );
//[] is what is supposed to be placed there

因为这是我找到的代码,而且因为我在代码中创建了标签,所以我无法提供控件名称。 (很有可能是我的失误)

设置标签的 ColumnSpan 属性。

经过更多搜索,我找到了一种方法。 而不是尝试这样做:

tableLayoutPanel1.Controls.Add(new Label() 
{ Text = naam, Dock = DockStyle.Fill, BackColor = Color.Green, AutoSize = true }
, 2, row);

我现在正在创建需要像这样的 columnspan 的标签

var label = new Label();
label.Text = naam;
label.Dock = DockStyle.Fill;
label.BackColor = Color.Red;
label.AutoSize = true;
tableLayoutPanel1.Controls.Add(label);
tableLayoutPanel1.SetCellPosition(label, new TableLayoutPanelCellPosition(2, row));
tableLayoutPanel1.SetColumnSpan(label, 2); 

如果您可以添加 identifying Name 属性:

,则您的原始代码将有效
tableLayoutPanel1.Controls.Add(new Label()
    { Name = "L1", Text = stat, Dock = DockStyle.Fill, 
      BackColor = Color.Green, AutoSize = true }, 7, row);

现在您可以使用 Name

tableLayoutPanel1.SetRowSpan(tableLayoutPanel1.Controls["L1"], 2 );

要创建 Name,您可以使用 Controls.Count 属性:

string name = "L" + tableLayoutPanel1.Controls.Count.ToString("00");

添加方法通常是return void。如果你想对项目进行操作,那么在调用 Add()(构造完整对象)之前进行操作或者以 正常方式 [=13 创建一个实例是有意义的=]

var item = new Label() { Text = stat, Dock = DockStyle.Fill, BackColor = Color.Green, AutoSize = true };
// do something with item here
tableLayoutPanel1.Controls.Add(item, 7, row);
// or do something with item here, e.g.:
tableLayoutPanel1.SetColumnSpan(item, 2);