lajtmaN
lajtmaN

Reputation: 465

dynamically create multiple textboxes C#

This is my code. But all my textboxes's value is just null.

    public void createTxtTeamNames()
    {
        TextBox[] txtTeamNames = new TextBox[teams];
        int i = 0;
        foreach (TextBox txt in txtTeamNames)
        {
            string name = "TeamNumber" + i.ToString();
            txt.Name = name;
            txt.Text = name;
            txt.Location = new Point(172, 32 + (i * 28));
            txt.Visible = true;
            i++;
        }
    }

Thanks for the help.

Upvotes: 3

Views: 36359

Answers (5)

JaredPar
JaredPar

Reputation: 754545

The array creation call just initializes the elements to null. You need to individually create them.

TextBox[] txtTeamNames = new TextBox[teams];
for (int i = 0; i < txtTeamNames.Length; i++) {
  var txt = new TextBox();
  txtTeamNames[i] = txt;
  txt.Name = name;
  txt.Text = name;
  txt.Location = new Point(172, 32 + (i * 28));
  txt.Visible = true;
}

Note: As several people have pointed out in order for this code to be meaningful you will need to add each TextBox to a parent Control. eg this.Controls.Add(txt).

Upvotes: 10

user4819434
user4819434

Reputation: 1

    private void button2_Click(object sender, EventArgs e)
    {
        TextBox tb = new TextBox();
        tb.Name = abc;
        tb.Text = "" + i;

        Point p = new Point(20 + i, 30 * i);
        tb.Location = p;
        this.Controls.Add(tb);
        i++;
    }


    private void button3_Click(object sender, EventArgs e)
    {
        foreach (TextBox item in this.Controls.OfType<TextBox>())
        {
            MessageBox.Show(item.Name + ": " + item.Text + "\\n");   
        }
    }

Upvotes: 0

Senad Meškin
Senad Meškin

Reputation: 13756

You are doing it wrong, you have to add textbox instances to the array, and then add it to the form. This is how you should do it.

public void createTxtTeamNames()
        {
            TextBox[] txtTeamNames = new TextBox[10];

for (int u = 0; u < txtTeamNames.Count(); u++)
            {
                txtTeamNames[u] = new TextBox();
            }
            int i = 0;
            foreach (TextBox txt in txtTeamNames)
            {
                string name = "TeamNumber" + i.ToString();

                txt.Name = name;
                txt.Text = name;
                txt.Location = new Point(0, 32 + (i * 28));
                txt.Visible = true;
                this.Controls.Add(txt);
                i++;
            }
        }

Upvotes: 0

Steve Czetty
Steve Czetty

Reputation: 6228

You need to new up your TextBoxes:

for (int i = 0; i < teams; i++)
{
    txtTeamNames[i] = new TextBox();
    ...
}

Upvotes: 1

Panetta
Panetta

Reputation: 31

You need to initialize your textbox at the start of the loop.

You also need to use a for loop instead of a foreach.

Upvotes: 1

Related Questions