использование переменных в именах объектов

#c# #.net #variables #integer #label

#c# #.net #переменные #целое #метка

Вопрос:

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

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

Ответ №1:

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

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

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

 void SetVisibility(int index, bool visible)
{
    labels[index] = visible;
}
  

Ответ №2:

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

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

if (label != null)
{
    // use...
}
  

Комментарии:

1. это похоже на то, что я хотел, но использование массивов выглядит короче и проще, точка.

Ответ №3:

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

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

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

Ответ №4:

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

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

Ответ №5:

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;
  

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

Ответ №6:

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

 label_array[abc].visible = true;
  

Ответ №7:

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

  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;

    }
  

Комментарии:

1. да, но это хорошо… не очень хорошо, на самом деле это сработает для 2 или 3 меток, но я действительно не хочу писать так много кода, когда у меня будет больше меток (что я и делаю).

2. Да, это не лучший подход, но я не знал вашего уровня программирования, поэтому я пытался помочь с идеей 🙂 … перейдите к примерам массива : D