Как изменить несколько меток, зависящих от ввода и выполнения кода, сгенерированного в string на C #?

#python #c# #string #label #execute

#python #c# #строка #метка #выполнить

Вопрос:

Мне не у кого спросить, поэтому я попробую здесь.

Я пытаюсь воссоздать пользовательский интерфейс приложения с python на C #, чтобы помочь нашим специалистам проверять файлы журналов тестирования на нескольких серверах.

У меня много меток в пользовательском интерфейсе (с использованием Visual Studio win forms), которые показывают техническому специалисту, существует журнал или нет в разных папках.

для этого мне нужно часто изменять конкретное свойство labels Text.

Ранее в python я создал функцию, которая создает строку кода из разных входных данных (перечисляет циклы for по мере того, как программа проверяет серверы и папки один за другим). А затем выполнить строковую переменную с помощью функции «exec» — проще простого.

например, функция, которая изменяет каждое свойство текста метки на «……….» ( что-то вроде очистить для нового поиска) после нажатия кнопки «Очистить»

 ...
for serv1 in range(len(self.servers)):
    for i in range(len(self.log_types)):
        clearStringCode = ('self.label_'   str(self.servers[serv1])   '_'   str(self.log_types[i])   _v.setText("..........")')
        exec(clearStringCode)
  

Я пытаюсь сделать то же самое в моей программе на C #, но в языке C # нет функции exec : (

пример: Я хочу изменить текст метки «labelL1TestStart» и еще нескольких из списка на «NotFound»

         private void folderNotFound(string area, string server, List<string> types)
        {
            foreach (string type in types)
            {
                string labelName = "label"   server   area   type; //creating button name to string
                string toExec = labelName   ".Text = "Not Found";"; //creating code to string
                SomeFunctionToExecuteTheString(toExec);
            }
        }
  

Мой вопрос — есть ли какой-нибудь способ выполнить строку, сгенерированную в foreach подобным образом? Или каков правильный способ сделать это .. изменение меток на основе входных переменных? Я что-то упускаю? На самом деле я не программист. Спасибо за ответ.

Картинка из моего приложения на Python, которое я пытаюсь воссоздать: введите описание изображения здесь

Ответ №1:

Вы можете попробовать метод Find, что-то вроде этого

 private void folderNotFound(string area, string server, List<string> types)
{
   foreach (string type in types)
   {
      string labelName = "label"   server   area   type; //creating button name to string
      var control = this.Controls.Find(labelName, true).FirstOrDefault();
      if (control != null)
      {
          control.Text = "Not Found";
      }
      else
      {
          // Do something else here
      }
   }
}
  

Ответ №2:

Вы можете сделать это, используя Control.Controls.Find() для поиска элемента управления с указанным .Name свойством, а затем напрямую установить его .Text свойство следующим образом:

 private void folderNotFound(Control container, string area, string server, List<string> types)
{
    foreach (string type in types)
    {
        string labelName = "label"   server   area   type; 

        var label = container.Controls.Find(labelName, searchAllChildren: true).FirstOrDefault();

        if (label != null)
            label.Text = ""Not found"";
    }
}
  

Control container Параметр — это форма, которая содержит метки / кнопки, для которых вы хотите настроить текст. Если folderNotFound() метод определен внутри формы, содержащей метку / кнопку, вы можете опустить этот параметр и использовать this вместо этого:

 private void folderNotFound(string area, string server, List<string> types)
{
    foreach (string type in types)
    {
        string labelName = "label"   server   area   type; 

        var label = this.Controls.Find(labelName, searchAllChildren: true).FirstOrDefault();

        if (label != null)
            label.Text = ""Not found"";
    }
}
  

Все это предполагает, что вы, конечно, установили Name свойство соответствующих меток / кнопок в конструкторе.