循环时奇怪地显示出来的控件;

时间:2013-06-14 09:49:04

标签: c#

我的问题是:

Image

那些标签是通过for循环创建的,我认为你得到了我的问题, 奇怪的重叠。

代码:

for (int i = 0; i < maxlabels ; i++)
{                
    Label x = new Label();
    x.Name = string.Format("label{0}", i);
    x.Top = 2 + (15 * i); // <---- changed this line
    x.Left = 3;
    x.Text = x.Name;
    x.BringToFront();
    x.BackColor = Color.Transparent;
    panel1.Controls.Add(x);                
}

在上面的代码中,当改变了

x.Top = 2 + (30 * i); 

(15 * i);

我得到了结果:

Image

2 个答案:

答案 0 :(得分:2)

我建议你使用FlowLayoutPanel。并将方向设置为自上而下(您也可以在属性UI中执行此操作):

 yourFlowLayoutPanel.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;

您不需要在此面板中设置顶部,左侧等: e.g。

for (int i = 0; i < maxlabels ; i++)
{                
        Label x = new Label();
        x.Name = string.Format("label{0}", i);
        x.Text = x.Name;
        x.BackColor = Color.Transparent;
        yourFlowLayoutPanel.Controls.Add(x);                
}

答案 1 :(得分:1)

由于您未在标签上明确设置高度,因此将使用默认值。

您可以通过设置x.AutoSize = true;并使用乘数

中的标签高度来解决此问题
for (int i = 0; i < maxlabels ; i++)
{                
    Label x = new Label();
    x.Name = string.Format("label{0}", i);
    x.AutoSize = true;`
    x.Top = 2 + (x.Height * i);
    x.Left = 3;
    x.Text = x.Name;
    x.BringToFront();
    x.BackColor = Color.Transparent;
    panel1.Controls.Add(x);                
}