如何指向控制?

时间:2011-10-22 11:18:12

标签: c# winforms

我在表单中有6个标签控件:label1,label2 ... label6。 如何在这样的循环中“引用”控件:

for (i=1;i<=6;i++) {
   label[i].text = ...;
}

谢谢

4 个答案:

答案 0 :(得分:2)

尝试,

Label []labels={Label1,Label2,Label3};

答案 1 :(得分:2)

这是另一种方式:

for (int n = 1; n < 4; n++)
{
    Control[] Temp = Controls.Find("Label" + n, false);
    Temp[0].Text = n.ToString();
}

答案 2 :(得分:1)

我们假设这是WinForms并且您的“标签”是控件 - Form具有Controls属性,这是与该容器关联的控件的集合,因此,我们应该能够使用Linq来查询它,获取我们想要的类型的控件,然后迭代它们,如下:

using System.Linq;

var labels = from control in Controls where control is Label select control;

for (i = 1; i <= controls.Count; i++)
{
   labels[i].text = i.ToString();
}

有点粗糙,但你不是很具体 - 如果没别的话,它应该是一个不错的起点。

编辑:

好吧,我以为我会花时间去研究它,Form.Controls不喜欢在Linq中使用(至少以这种直截了当的方式),所以作为替代方案,这应该有帮助:

private List<Label> GetLabels()
{
    var result = new List<Label>();
    foreach (var control in Controls)
    {
        if (control is Label)
        {
            result.Add(control as Label);
        }
    }
    return result;
}

上述方法甚至可以简单地以通用方式考虑;但是你可以继续:

var labels = GetLabels();
for (int i = 0; i <= labels.Count; i++)
{
    labels[i].Text = i.ToString();
}

答案 3 :(得分:1)

您可以实现以下内容: -

    int y = 0;
    int index = 0;

    Label[] labels = new Label[6];

    foreach (Student std in StudentList)
    {
            labels[index] = new Label();

            labels[index].Text = std.Name;

            labels[index].ForeColor = Color.Red;

            labels[index].Location = new Point(0, y);

            labels[index].Size = new Size(50, 12);

            y = y + 10;
            ++index;
    }

    // Add the Label control to the form.
    mPanel.Controls.AddRange(labels);