我正在使用c#在asp.net中使用winform应用程序。我在设计模式下创建的winform上有10个标签,名为Label0到Label9。现在我想根据我在程序执行过程中获取的数据一次更改所有标签的Text属性。 我想做这样的事情:
for (int i = 0; i < 10; i++)
{
Label[i].Text = "Hello, this is label: "+ i.ToString();
}
现在,当然这不起作用。但是怎么做呢?我怎样才能像在数组中那样调用标签?如果不可能,那么什么是我的问题的最佳替代解决方案?
答案 0 :(得分:3)
如果你在谈论WinForms,那么你可以这样做:
private void Form1_Load(object sender, EventArgs e)
{
// Form1_Load is just sample place for code executing
for (int i = 1; i < 10; i++)
{
var label = Find<Label>(this, "label" + i);
label.Text = "Hello, this is label: " + i.ToString();
}
}
private T Find<T>(Control container, string name)
where T : Control
{
foreach (Control control in container.Controls)
{
if (control is T && control.Name == name)
return (T)control;
}
return null;
}
此代码将搜索表单控件中的标签,然后根据控件name
返回并键入T
。但它只会使用父表单。因此,如果您的标签位于某个面板中,则需要将面板指定为container
参数。否则Find
方法可以更新为递归方法,因此它将搜索所有表单子控件,但如果有两个Label1
控件,那么它将只返回第一个,这可能是不正确的。
答案 1 :(得分:0)
如果您可以使用以下代码更改文本
,则可以在面板上放置所有标签 foreach (Control p in panal.Controls)
if (p.GetType == Label)
p.Text = "your text";