从变量构造标签id

时间:2010-12-26 07:09:20

标签: c# .net

我的表单上有很多标签/按钮,它们的名称类似于lable_1,label_2,label_3。

我有一个设置标签/按钮属性的循环。有没有办法从变量构造标签的名称。

示例:

while()
{

int++;
label_1.Text="abc";    <---- Something like label_+'int'.Text="abc"

}

这可能吗?

4 个答案:

答案 0 :(得分:3)

如果您的所有Label控件都具有相同的父级,则可以使用其父级的FindControl()方法从其ID中获取它们:

for (int i = 1; i <= yourLabelCount; ++i) {
    Label label = labelParentControl.FindControl(String.Format(
        CultureInfo.InvariantCulture, "label_{0}", i)) as Label;
    if (label != null) {
        label.Text = "abc";
    }
}

答案 1 :(得分:1)

还没有。 PHP中没有eval()关键字。

更好的是定义标签列表,然后使用Name属性:

System.Collections.Generic.List<Label> labels = new System.Collections.Generic.List<Label>();

int i = 0;
while (true)
{
    Label newLabel = new Label();
    newLabel.Name = string.Format("label_{0}", i++);

    labels.Add(newLabel);
}

另一种方法是使用dictionary代替:

System.Collection.Generic.Dictionary<string, Label> labels = new System.Collection.Generic.Dictionary<string, Label>();

int i = 0;
while (true)
{
    Label newLabel = new Label();
    string name = string.Format("label_{0}", i++);

    labels.Add(name, newLabel);
}

答案 2 :(得分:0)

我不知道你为什么要这样做,我认为这是一个太糟糕的主意,因为经过一段时间你将无法区分这些控件..所以最好的建议是使用命名用于轻松识别这些控件的约定,即使它们很多也可以给它们命名..仍然可以通过循环构造控件名称。

答案 3 :(得分:0)

lable_1,label_2不是控件的好名字,试着给出一些有意义的名字。

用于回答您的问题

是的,你可以实现

int i = 1;

while(some terminating condition)
{

 var lbl = this.Controls.OfType<Label>().Where(x=>x.Name==label_+ i.ToString()).ToList()[0];

 lbl.Text ="abc";

 i++ ;
}