如何更改依赖于输入和执行代码的多个标签生成为 C# 中的字符串?
How to change multiple labels that depends on input and executing code generated to string in C#?
我没有人问所以我就在这里试试。
我正在尝试从 python 到 C# 重新创建 UI 应用程序,以帮助我们的技术人员检查多台服务器上的测试日志文件。
我在 UI 中有很多标签(使用 visual studio win 表单),显示技术人员日志是否存在于不同的文件夹中。
为此,我需要大量更改特定标签文本 属性。
之前,在 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 应用程序中的图片:
可以通过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
参数是包含要为其调整文本的 labels/buttons 的表单。如果在包含 label/button 的表单中定义了 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\"";
}
}
当然,这一切都假设你已经在设计器中设置了相关labels/buttons的Name
属性。
你可以试试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
}
}
}
我没有人问所以我就在这里试试。
我正在尝试从 python 到 C# 重新创建 UI 应用程序,以帮助我们的技术人员检查多台服务器上的测试日志文件。
我在 UI 中有很多标签(使用 visual studio win 表单),显示技术人员日志是否存在于不同的文件夹中。
为此,我需要大量更改特定标签文本 属性。
之前,在 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 应用程序中的图片:
可以通过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
参数是包含要为其调整文本的 labels/buttons 的表单。如果在包含 label/button 的表单中定义了 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\"";
}
}
当然,这一切都假设你已经在设计器中设置了相关labels/buttons的Name
属性。
你可以试试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
}
}
}