2013-04-27 72 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(); 
} 

希望这会有所帮助。