2012-02-20 14 views
2

これは私のコードです。 しかし、私のテキストボックスの値はすべてnullです。複数のテキストボックスを動的に作成するC#

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

ありがとうございました。

+0

'teams'値とは何ですか? – Yuck

答えて

9

配列作成呼び出しでは、要素がnullに初期化されます。個別に作成する必要があります。

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

注:いくつかの人々が有意義であることを、このコードのために指摘したように、あなたは、ループの開始時に、あなたのテキストボックスを初期化する必要があり、親Control

+1

コードが意味のある目的を持つためには、 'txt'の各インスタンスもまたいくつかの親コントロールに追加する必要があります。 – Yuck

+0

フォームに追加していない場合はthis.Controls.Add(txt)を呼び出す必要があります。 –

+1

@SenadMeškinはい、それはほとんど確実にOPがする必要がありますwhathです。しかし、問題はより具体的なので、私はそれに取り組もうとしました。 – JaredPar

1

に各TextBoxを追加する必要があります。

また、foreachではなくforループを使用する必要があります。あなたがアップし、新しいあなたのTextBoxに必要

1

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

あなたは間違ってそれをやっているが、あなたは配列にテキストボックスのインスタンスを追加する必要があり、その後、フォームに追加します。これがあなたのやり方です。

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++; 
      } 
     } 
0
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"); 
     } 
    } 
関連する問題