假设我有 5 个 texbox:
textbox1
textbox2
textbox3
textbox4
textbox5
我想在每个中写一些东西。有没有办法用循环来做到这一点?我在想一些看起来像的东西:
for (int i = 1; i < 6; i++)
{
textbox[i].Text = i.ToString();
}
所以我会在每个文本框中得到一个数字。或者有没有办法拥有一个文本框数组?
考虑使用this.Controls.OfType<TextBox>
,它将为您提供一个包含表单上所有TextBox
es 的列表。
您也可以通过名称访问它们this.Controls["textbox" + i]
。( http://msdn.microsoft.com/en-us/library/s1865435.aspx )
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++;
}
多种选择:
this.Controls.OfType<TextBox>
csharpler 说的。静态选项:
创建一个静态数组:
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);
创建所需大小的文本框数组和对其的文本框引用。在你的情况下。
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();
}
希望这会有所帮助。