我的表单上有很多标签/按钮,它们的名称类似于lable_1,label_2,label_3。
我有一个设置标签/按钮属性的循环。有没有办法从变量构造标签的名称。
示例:
while()
{
int++;
label_1.Text="abc"; <---- Something like label_+'int'.Text="abc"
}
这可能吗?
答案 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++ ;
}