использование переменных в именах объектов - PullRequest
3 голосов
/ 06 мая 2011

Хорошо, допустим, у меня есть целое число с именем abc, и я установил abc на 2. Как мне сказать label2.visible = true;?

Я имею в виду, если я установлю abc на 3, я хочу сделать label3.visible = true;

Ответы [ 7 ]

6 голосов
/ 06 мая 2011

Мне кажется, проще всего поместить ваши элементы управления в массив следующим образом:

Label[] labels = new Label[] { label0, label1, label2, label3 };

Переключить видимость следующим образом:

void SetVisibility(int index, bool visible)
{
    labels[index] = visible;
}
6 голосов
/ 06 мая 2011

Вы хотите использовать метод Control.FindControl.

Label label = myForm.FindControl("label" + val) as Label;

if (label != null)
{
    // use...
}
3 голосов
/ 06 мая 2011

Вы можете сделать что-то вроде этого:

var theLabel = (Label) this.Controls.Find("label" + abc.toString());
theLabel.Visible = true;

Этот код не проверен и не работает, но должен работать

2 голосов
/ 06 мая 2011

C # Действительно не поддерживает этот тип синтаксиса.

Поместите метки в некую структуру и используйте ее для манипулирования метками. Вот несколько примеров:

List<Label> labels = new List<Label>();
int i = /* some valid index (0 based) */
labels[i].visible = true;

Dictionary<string, Label> labelDict = new Dictionary<string, Label>();
labelDict.add("label1", label1);
labelDict["label1"].visible = true;

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

2 голосов
/ 06 мая 2011

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

Как уже сообщали другие, используйтемассив.

2 голосов
/ 06 мая 2011

Способ сделать это - иметь и массив меток, а затем в соответствии с числом, которое вы можете сделать:

label_array[abc].visible = true;
0 голосов
/ 06 мая 2011

Два простых примера

 if(abc == 2)
     {
          label2.visible = true;
          label3.visible = false;
      }
   else if(abc ==3)
      {
         label3.visible = true;
         label2.visiable = false;       
      }

 or use a switch statement

    switch(abc)
    {
       case 2:
             label2.visible = true;
             break;
       case 3:
             label3.visible = true;
             break;

    }
...