dynamically create multiple textboxes C#

2019-02-15 14:36发布

问题:

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.

回答1:

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



回答2:

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

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



回答3:

You need to new up your TextBoxes:

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


回答4:

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


回答5:

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


标签: c# textbox