RTX
RTX

Reputation: 109

How to create labels for each element?

I have the following code. On form load, I want to create multiples labels, the first should be on position (20,0), the second on the (40,0) and till the last label. But the program just shows the first label, I mean label 0, and that's all.
How to fix this?

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

Upvotes: 0

Views: 163

Answers (6)

Dmitrii Bychenko
Dmitrii Bychenko

Reputation: 186668

Try using Linq in order do generate Labels:

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

Upvotes: 0

Vicky S
Vicky S

Reputation: 832

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

you also need to resize your form as well, this code will help you,

Upvotes: 2

Cataklysim
Cataklysim

Reputation: 677

Actually, you don't edit the right property. The right one would be control.Location which is a Point with the properties x and y.

To add them with 20 for every loop, you actually need to go like (20 * (i+1))

Example code that worked:

    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

EDIT: Work on that 20 pt. Seems like the labels won't show right. Maybe try 30pt?

Upvotes: 1

mm8
mm8

Reputation: 169160

You should increase the Left value by 20 for each iteration. I also don't see why you are populating an array since you just add the Labels to the Controls collection. Try this:

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

Upvotes: 1

adjan
adjan

Reputation: 13652

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

will calculate the distance you want. Yet, you will only see one label because the first label is too long. So you have to adjust its size:

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

Then you will see that 20 pixels is way too small as a distance; the labels will overlap

Upvotes: 2

dymanoid
dymanoid

Reputation: 15197

In your loop, replace

nmr[i].Left +=20;

with

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

Upvotes: 1

Related Questions