2013-04-27 73 views
2

比方說,我有5個texboxes:處理變量

textbox1 
textbox2 
textbox3 
textbox4 
textbox5 

我想要寫在每個東西。有沒有辦法做到這一點與循環?我正在考慮如下的東西:

for (int i = 1; i < 6; i++) 
{ 
    textbox[i].Text = i.ToString(); 
} 

所以我會在每個文本框中得到一個數字。 還是有一種方法有一個文本框的數組?

+0

你說的是WPF還是Winforms? – Matthias 2013-04-27 16:26:26

+0

這是一個Windows窗體應用程序 – 2013-04-27 16:28:43

回答

4

考慮使用this.Controls.OfType<TextBox>,它會給你一個列表,其中包含表格中所有TextBox

您還可以通過this.Controls["textbox" + i]的名稱訪問它們。 (http://msdn.microsoft.com/en-us/library/s1865435.aspx

+0

this.Controls [「textbox」+ i] 工程就像一個魅力。謝謝! – 2013-04-27 16:37:32

0
List<Textbox> list = new List<Textbox>() {textbox1, textbox2, textbox3, textbox4, textbox5}; 
int i = 1; 
foreach (var item in list) 
{ 
     item.Text = i.ToString(); 
     i++; 
} 

如果這些文本框5你在這個表單中的所有文本框,你也可以使用;

int i = 1; 
foreach(var item in this.Controls.OfType<TextBox>()) 
{ 
     item.Text = i.ToString(); 
     i++; 
} 
+0

您應該創建一個'List '而不是'List '。 – Dirk 2013-04-27 16:34:35

+0

@Dirk是的,那是另一種選擇.. – 2013-04-27 16:38:14

0

Verious選項:

  • 如果你的控件在同一容器(如在同一面板):作爲csharpler說使用this.Controls.OfType<TextBox>
  • 如果你的控制是在各種容器(如在裏面行的表),你可以有兩個選項中進行選擇:

靜態選項

創建靜態數組:

TextBox[] textboxes = new[] { textbox1, textbox2, textbox3, textbox4, ... }; 
for (int i=0; i < textBoxes.Length; i++) 
    textboxes[i].text = (i + 1).toString(); 

動態選項:

static public SetTextBoxIndex(ControlCollection controls, ref int index) 
{ 
    foreach(Control c in controls) 
    { 
     TextBox textbox = c as TextBox; 
     if (textbox != null) 
      textbox.Text =(++index).ToString(); 
     else 
      SetTextBoxIndex(c.Controls, ref index); 
    } 
} 

// Somewhere on your form: 
int index = 0; 
SetTextBoxIndex(this.Controls, ref index); 
0

創建一個所需大小和文本框引用的文本框數組。在你的情況。

TextBox[] textBoxes = new TextBox[5]; 
textboxes[0] = textbox1; 
textboxes[1] = textbox2; 
textboxes[2] = textbox3; 
textboxes[3] = textbox4; 
textboxes[4] = textbox5; 

for (int i = 1; i < 6; i++) 
{ 
    textbox[i].Text = i.ToString(); 
} 

希望這會有所幫助。