可以遍历变量列表,名称只有数字不同?

时间:2010-09-24 09:58:12

标签: c# winforms

例如,在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
}

4 个答案:

答案 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;
    }
}

我认为这应该将控件放在数组中的正确索引中。