如何指向控制

本文关键字:控制 何指 | 更新日期: 2023-09-27 18:11:57

我有6个标签控件在一个表单:label1, label2…label6。如何像这样在循环中"引用"控件:

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

谢谢

如何指向控制

试试,

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

还有另一种方法:

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

让我们假设这是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();
}

你可以这样实现:-

    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);