例如,在Windows窗体中,您有文本框textbox0到textbox29,您需要将它们全部分配给一个数组。我目前能想到的是这样做:
array[0] = textbox0;
array[1] = textbox1;
...
array[29] = textbox29;
我可以做这样的事情:
for(int i=0; i<30; i++)
{
array[i] = textbox + i;
//and some magic is done such tt this is a variable, eg. textbox1
}
答案 0 :(得分:5)
this.Controls.OfType<TextBox>().ToArray()
应该有效。它选择TextBox控件,然后将它们转换为数组。
答案 1 :(得分:4)
从头到尾:
int i = 0;
foreach (Control c in FormX.Controls)
{
int i2;
if (c.Name.StartsWith("textbox") && int.TryParse(c.Name.Substring(7),out i2))
{
array[i] = c;
i++;
}
}
array = array.OrderBy(a => Convert.ToInt32(a.Name.Substring(7))).ToArray();
答案 2 :(得分:2)
好吧,你可以使用反射......但我个人试图避免创建所有这些单独的变量。例如,如果确实需要设计器支持,则可以避免创建单独的变量,但可以通过按名称查找控件来创建数组。
或者,如果您可以在循环中以编程方式自动生成控件,我会这样做。
答案 3 :(得分:1)
我正在修改@rdkleine代码
Control[] array = new Control[100];
foreach (Control c in FormX.Controls)
{
int index;
if (c.Name.StartsWith("textbox") && int.TryParse(c.Name.Substring(7),out index))
{
array[index] = c;
}
}
我认为这应该将控件放在数组中的正确索引中。