如何为每个元素创建标签?

时间:2017-06-02 12:45:46

标签: c# winforms

我有以下代码。在表单加载时,我想创建多个标签,第一个应该在位置(20,0),第二个应该在(40,0)上,直到最后一个标签。但程序只显示第一个标签,我的意思是标签0,这就是全部 如何解决这个问题?

private void Form1_Load(object sender, EventArgs e)
{
    Label[] nmr = new Label[10];
    for(int i=0; i<10; i++)
    {
        nmr[i] = new Label();
        nmr[i].Text = "label " + i;
        nmr[i].Left += 20;
        this.Controls.Add(nmr[i]);
    }
}

6 个答案:

答案 0 :(得分:2)

enter image description here

private void Form3_Load(object sender, EventArgs e)
            {
                Label[] nmr = new Label[10];
                for (int i = 0; i < 10; i++)
                {
                    nmr[i] = new Label();
                    nmr[i].Text = "label " + i;
                    nmr[i].Location = new Point(0, 25 * i);
                    this.Controls.Add(nmr[i]);
                }
                this.Height = this.Height + (25 * nmr.Count());
            }

您还需要调整表单大小, 这段代码可以帮到你,

答案 1 :(得分:2)

  nmr[i].Left = 20 * (i+1);

将计算您想要的距离。但是,您只会看到一个标签,因为第一个标签太长。所以你必须调整它的大小:

  nmr[i].Size = new Size(40, 15);

然后你会看到20个像素太小而不是距离;标签将重叠

答案 2 :(得分:1)

每次迭代都应该将Left值增加20。我也不明白为什么要填充数组,因为您只需将标签添加到Controls集合中。试试这个:

private void Form1_Load(object sender, EventArgs e)
{
    for (int i = 1; i < 11; i++)
    {
        var label = new Label();
        label.Text = "label " + i;
        label.Left += 20 * i;
        this.Controls.Add(label);
    }
}

答案 3 :(得分:1)

在你的循环中,替换

nmr[i].Left +=20;

nmr[i].Left = 20 * (i + 1);

答案 4 :(得分:1)

实际上,您没有编辑正确的属性。正确的是control.LocationPoint,其属性为x和y。

要为每个循环添加20,你实际上需要像(20 * (i+1))

有效的示例代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        Label[] nmr = new Label[10];
        for (int i = 0; i < 10; i++)
        {
            nmr[i] = new Label();
            nmr[i].Text = "label " + i;
            nmr[i].Location = new Point(0, (20 * (i+1)));
            this.Controls.Add(nmr[i]);
        }
    }

Labels on a Form

编辑:工作20点。好像标签不会显示正确。也许试试30pt?

答案 5 :(得分:0)

尝试使用 Linq 按顺序生成Label s:

using System.Linq;

...

private void Form1_Load(object sender, EventArgs e) {
  Label[] nmr = Enumerable
    .Range(0, 10)
    .Select(i => new Label() {
       Text = $"label {i}",
       Left = 20 + i * 20, // <- please, notice Left computation
       Parent = this, })
    .ToArray();
}