【问题标题】:set row/column span programmatically以编程方式设置行/列跨度
【发布时间】:2015-05-06 20:26:07
【问题描述】:

我正在尝试制作一个动态布局来显示数据库中的数据,因为我使用的是 tablelayoutpanel,我把它放到了我想要它去的字段中的数据位置,但我不能弄清楚我将如何给一些字段一个行或列跨度,因为其中一些需要遍历多个字段

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

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

我确实在 SO 上搜索了一个解决方案,我确实找到了一些可以设置列跨度的解决方案,但它们只是不适用于我创建标签的方式。

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

因为这是我找到的代码,并且因为我在代码中创建了标签,所以我无法给出控件名称。 (很有可能是我搞错了)

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example
  • 我的问题不是它为什么不起作用,而是如果我像上面的示例那样在代码中创建标签,我将如何将列跨度添加到标签。

标签: c# winforms label tablelayout


【解决方案1】:

添加方法通常返回void。如果您想对项目进行操作,那么在调用Add()(构造完整对象)之前执行此操作或以正常方式

创建一个实例是有意义的
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);    

【讨论】:

    【解决方案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");
    

    【讨论】:

    • 我尝试将我自己的名称设置为 wel 但我猜我在代码中做错了,因为它稍后在代码中无法识别控件的名称。但我有一些现在可以使用的东西。但仍然感谢您提供帮助
    【解决方案3】:

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

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

    我现在正在创建需要这样的列跨度的标签

    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); 
    

    【讨论】:

      【解决方案4】:

      设置标签的 ColumnSpan 属性。

      【讨论】:

      • 我知道我需要设置该属性我的问题是如何设置该标签上的列跨度。
      • 正如您现在所知道的,您必须知道标签的 ID 是什么。因此,按照下面的示例,您有 var label = new Label(),您可以使用 label.ColumnSpan = 2,然后将标签添加到面板控件。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      相关资源
      最近更新 更多