dynamically create multiple textboxes C#

2019-02-15 14:26发布

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.

标签: c# textbox
5条回答
爷、活的狠高调
2楼-- · 2019-02-15 15:04

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楼-- · 2019-02-15 15:04

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++;
            }
        }
查看更多
萌系小妹纸
4楼-- · 2019-02-15 15:16
    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");   
        }
    }
查看更多
可以哭但决不认输i
5楼-- · 2019-02-15 15:21

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

查看更多
乱世女痞
6楼-- · 2019-02-15 15:25

You need to new up your TextBoxes:

for (int i = 0; i < teams; i++)
{
    txtTeamNames[i] = new TextBox();
    ...
}
查看更多
登录 后发表回答