使用像数组一样的标签
Using labels like arrays
我正在 asp.net 使用 c# 开发 winform 应用程序。我在设计器模式下创建的 winform 上有 10 个标签,称为 Label0 到 Label9。现在我想根据我在程序执行过程中获取的数据一次更改所有标签的文本 属性。
我想做这样的事情:
for (int i = 0; i < 10; i++)
{
Label[i].Text = "Hello, this is label: "+ i.ToString();
}
现在,这当然行不通了。但如何做到这一点?我怎样才能像在数组中完成的那样调用标签?如果不可能,那么我的问题的最佳替代解决方案是什么?
如果你在谈论 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;
}
此代码将在表单控件中搜索标签,然后return 它基于控件name
并键入T
。但它只会使用父表单。因此,如果您的标签位于某个面板中,则需要将面板指定为 container
参数。否则 Find
方法可以更新为递归方法,因此它将在所有表单子控件中搜索,但是如果有两个 Label1
控件,那么它会 return 只是第一个,这可能不正确。
如果您可以在面板上放置所有标签,您可以使用以下代码更改文本
foreach (Control p in panal.Controls)
if (p.GetType == Label)
p.Text = "your text";
我正在 asp.net 使用 c# 开发 winform 应用程序。我在设计器模式下创建的 winform 上有 10 个标签,称为 Label0 到 Label9。现在我想根据我在程序执行过程中获取的数据一次更改所有标签的文本 属性。 我想做这样的事情:
for (int i = 0; i < 10; i++)
{
Label[i].Text = "Hello, this is label: "+ i.ToString();
}
现在,这当然行不通了。但如何做到这一点?我怎样才能像在数组中完成的那样调用标签?如果不可能,那么我的问题的最佳替代解决方案是什么?
如果你在谈论 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;
}
此代码将在表单控件中搜索标签,然后return 它基于控件name
并键入T
。但它只会使用父表单。因此,如果您的标签位于某个面板中,则需要将面板指定为 container
参数。否则 Find
方法可以更新为递归方法,因此它将在所有表单子控件中搜索,但是如果有两个 Label1
控件,那么它会 return 只是第一个,这可能不正确。
如果您可以在面板上放置所有标签,您可以使用以下代码更改文本
foreach (Control p in panal.Controls)
if (p.GetType == Label)
p.Text = "your text";