通过字段迭代?

时间:2014-05-23 09:02:15

标签: c# variables loops

首先,如果有人问过,我不完全确定如何用这句话或者搜索什么来搜索。

假设我有多个标签:label1,label2,label3,label4等.​​.....

现在,我知道这适用于PHP,所以我想知道是否有办法在C#中执行此操作 - 我可以以某种方式遍历这些标签以在循环中设置它们的值吗?

即。

string[] something = new string[3] { "text", "text", "text" };

for (int i = 0; i < something.length; i++)
{
    labels(i).Text = something[i];
}

4 个答案:

答案 0 :(得分:3)

您可以使用Controls.Find()方法通过其控件名称查找Label Control。

试试这个:

for (int i = 0; i < something.length; i++)
{
   ((Label) Controls.Find("lablel"+i,true)[0]).Text = something[i];
}

答案 1 :(得分:2)

您可以使用.OfType<>

从Controls集合中获取可用的标签列表

例如

foreach(Label l in this.Controls.OfType<Label>())
{
    ...
}

答案 2 :(得分:1)

您可以使用Controls.Find查找所有引用:

for (int i = 0; i < something.length; i++)
{
    var lbl = this.Controls.Find("lable" + i, true);
    if(lbl.Length > 0)
        ((Label)lbl[0]).Text = something[i];
}

另一种使用LINQ的方法(它不会递归搜索而不是Find):

for (int i = 0; i < something.Length; i++)
{
    Label lbl = this.Controls.Cast<Label>()
        .FirstOrDefault(l => l.Name.Equals("lable" + i, StringComparison.InvariantCultureIgnoreCase));
    if(lbl != null) lbl.Text = something[i];
}

但是,我不会称之为良好做法。您的阵列和标签彼此直接相关。如果更改阵列但忘记更改标签会有什么问题?

您应该使用其他控件,例如ListBoxDataGridView,或者根据数组的大小动态创建标签。

答案 3 :(得分:1)

或者只需查找所有标签而无需知道其名称:

foreach (Control ctrl in this.Controls)
{
    Label label = ctrl as Label;
    if (label != null)
    {
        label.Text = "";
    }
}