如何指向控制
本文关键字:控制 何指 | 更新日期: 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);