2013-04-03 80 views
2

我有一個形式,與20 TextBoxes(2-22),我想補充他們所有的一個List<TextBox>這樣我就可以在所有的人都使用for-statement添加例如相同的文本。許多形式,文本框」 <TextBox>

我想什麼(笑):

List<TextBox> textBoxes = new List<TextBox>(); 

for(int i = 2; i < 23; i++) { 

//This String should refer to = textBox2, textBox3, etc 
textBoxes.Add("textBox"+ Convert.ToString(i)); 

} 

但是這是行不通的,因爲它不能將字符串轉換爲一個textBoxName。 你可以這樣做:

textBoxes.Add(textBox2); 
    textBoxes.Add(textBox3); 
    textBoxes.Add(textBox4); 
    ...So on 

但就是沒人有時間爲... :)

回答

1

如果它的WinForms這應該工作...

textBoxes.Add((TextBox)Controls.Find("textBox" + i, true)[0]); 
+0

這有一些無效的參數,甚至當我轉換的「i」爲字符串。 – 2013-04-03 20:42:16

+0

@NickPeelman,在我將演員加到'TextBox'後,它的功能就像是一種魅力。 – 2013-04-03 20:51:00

1

您需要在將它們傳遞給列表之前將它們作爲控件投入,而不是試圖在您的List<TextBox>中輸入字符串值。

嘗試添加該到你的循環,而不是:

textBoxes.Add((TextBox)this.Controls.Find("textBox"+ Convert.ToString(i),true)); 
+0

錯誤:沒有超載方法「find」需要1個參數 – 2013-04-03 20:43:41

+0

我把你和Jens的代碼結合在一起,它工作。 ((TextBox)this.Controls.Find(「textBox」+ Convert.ToString(i),true)[0]);' – 2013-04-03 20:44:59

+0

抱歉,缺少searchAllChildren的「true」位://msdn.microsoft.com/en-GB/library/system.windows.forms.control.controlcollection.find.aspx – Tanner 2013-04-03 20:45:53

0
List<TextBox> textBoxes = new List<TextBox>(); 

for (int i = 1; i <= 22; i++) { 
    textBoxes.Add((TextBox)this.Controls.Find("textBox" + i, false)(0)); 

}