像数组一样使用标签

本文关键字:一样 标签 数组 | 更新日期: 2023-09-27 17:50:48

我正在使用c#开发asp.net中的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;
}

此代码将搜索表单控件中的标签,然后根据控件name和类型T返回标签。但它只使用父表单。所以如果你的标签是在一些面板,那么你需要指定面板作为container参数。否则,Find方法可以更新为递归方法,因此它将在所有表单子控件中搜索,但如果有两个Label1控件,那么它将返回第一个,这可能是不正确的。

如果你可以把所有的标签放在面板之后,你可以使用下面的代码来改变文本

          foreach (Control p in panal.Controls)
            if (p.GetType == Label)
               p.Text = "your text";