遍历字段



首先,我不完全确定如何表达这个问题,或者如果有人之前问过,我应该搜索什么。

假设我有多个标签: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];
}

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

试试这个:

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

您可以使用.OfType<>

从Controls集合中获取可枚举的标签列表。

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

或者直接找到所有的标签而不需要知道它们的名称:

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

您可以使用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,或根据数组的大小动态创建标签

最新更新