如何更改多个标签,这些标签取决于在C#中为字符串生成的输入和执行代码?

问题描述

我没有人要问,所以我会在这里尝试。

我正在尝试从python到C#重新创建UI应用程序,以帮助我们的技术人员检查多台服务器上的测试日志文件

我在UI中有很多标签(使用Visual Studio Win窗体),可以显示技术人员日志是否在不同的文件夹中。

为此,我需要大量更改特定标签的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应用程序中的图片

enter image description here

解决方法

您可以使用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,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属性。

,

您可以尝试Find方法,诸如此类

private void folderNotFound(string area,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
      }
   }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...