#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
свойство соответствующих меток / кнопок в конструкторе.