Помещение ярлыков WinForm в массив? - PullRequest
0 голосов
/ 22 сентября 2010

Допустим, у меня есть

Label1
Label2
Label3

Я хочу сделать что-то вроде:

for(int i=0;i<3;i++)
{
    LabelArray[i].Text = "weee!";
}

Чтобы заполнить массив, я знаю, что могу сделать что-то вроде:

LabelArray[0] = Label1;
LabelArray[1] = Label2;
LabelArray[2] = Label3;

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

Есть ли лучший способ сделать это?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 22 сентября 2010

Вам нужно перебрать Form.Controls[], чтобы найти метки.

foreach (var control in this.Controls)
{
    if (control is Lable)
         labelList.Add((Lable)control));
}
0 голосов
/ 22 сентября 2010

У вас есть два варианта:

  • Используйте Reflection для получения меток, например

    for (int i = 0; i < 50; i++)
        labelArray[i] = (Label)GetType().GetField("Label" + (i+1)).GetValue(this);
    
  • Не используйте дизайнер WinForms для создания 50 ярлыков, но создавайте их динамически и в первую очередь помещайте их прямо в массив.

0 голосов
/ 22 сентября 2010

Если вы создаете метки программно, вы можете создать метку и задать текст внутри цикла for, а затем добавить его в коллекцию Controls форм.

Если вы добавите 50 этикеток во время разработки, чтобы они получили 50 отдельных имен, то я не знаю ни одного лучшего решения.

Если вы хотите задать текст всех меток, вы также можете выполнить итерацию коллекции Controls вашей Формы и проверить, имеют ли они тип Label, и, если они есть, установить их текстовое свойство.

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