Можно перебрать список переменных, имена которых отличаются только числами? - PullRequest
0 голосов
/ 24 сентября 2010

Например, в Windows Form у вас есть текстовые поля от 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 ]

5 голосов
/ 24 сентября 2010
this.Controls.OfType<TextBox>().ToArray()

должно работать. Он выбирает элементы управления TextBox, а затем преобразует их в массив.

4 голосов
/ 24 сентября 2010

От макушки моей головы:

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 голосов
/ 24 сентября 2010

Ну, вы могли бы использовать рефлексию ... но лично я бы постарался не создавать все эти отдельные переменные для начала.Например, если вам действительно нужна поддержка дизайнера, вы можете избежать создания отдельных переменных, но создать массив, найдя элементы управления по имени.

В качестве альтернативы, если вы можете просто автоматически генерировать элементы управления вцикл, я бы сделал это.

1 голос
/ 24 сентября 2010

Я изменяю код @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;
    }
}

Я думаю, что это должно поместить элементы управления в правильный индекс в массиве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...