2012-02-20 165 views
2

這是我的代碼。 但我所有的文本框的值都是空值。動態創建多個文本框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 2012-02-20 21:37:17

回答

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

注:正如一些人爲了人士指出,此代碼是有意義的,你需要給每個TextBox添加到父Control

+1

爲了讓代碼具有任何有意義的用途,每個'txt'實例都必須添加到某個父控件中。 – Yuck 2012-02-20 21:40:00

+0

你沒有把它添加到表單中,你需要調用this.Controls.Add(txt); – 2012-02-20 21:43:20

+1

@SenadMeškin是的,這幾乎可以肯定OP需要做什麼。但這個問題更具體,所以我試圖解決這個問題。 – JaredPar 2012-02-20 21:44:40

1

您需要在循環的開始初始化你的文本框。

您還需要使用for循環而不是foreach。

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