C #: Как создать переменную из других переменных - PullRequest
0 голосов
/ 22 апреля 2010

Как создать новую переменную в C #.

Я имею в виду, что-то вроде этого

public void updateXXX(string endingOfVariable, int newValue)
{
   this.textBox_{endingOfVariable} = newValue;
}

Это реализовано в Php:

$a = 'var'; $b = 'iable';
$variable = 'var';
echo ${$a.$b};

Но, возможно, это возможно в C #.

Проблема в том, что я создал ~ 500 textBoxes в C # Windows Form, и если я хочу установить значение, мне нужно собрать switch () {case :; } Постановка на 500 дел.

Ответы [ 5 ]

7 голосов
/ 22 апреля 2010

Если вы присвоили имя каждому TextBox, вы можете создать словарь, сопоставляющий имена с элементами управления:

var boxes = form.Controls.OfType<TextBox>().ToDictionary(t => t.Name);

public void Update(string name, int newValue)
{
    boxes[name].Text = newValue.ToString();
}
4 голосов
/ 22 апреля 2010

Игнорируя тот факт, что вы выполняете оператор switch для 500 случаев, вы можете использовать метод FindControl и привести его к TextBox.

((TextBox)FindControl("textbox_" + endingOfVariable)).Text = newValue;
0 голосов
/ 22 апреля 2010

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

0 голосов
/ 22 апреля 2010

Вам нужно использовать отражение

  static void Main( string[] args )
  {
    Type type = typeof(MyClass);
    object o = Activator.CreateInstance(type);

    FieldInfo field = type.GetField("text", BindingFlags.NonPublic | BindingFlags.Instance);
    field.SetValue(o, "www.domain.com");
    string text = (string)field.GetValue(o);

    Console.WriteLine(text);

  }

из java2s

0 голосов
/ 22 апреля 2010

Наличие 500 текстовых полей в форме Windows может быть проблемой само по себе (слишком много элементов управления может быть медленным).

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

...