将i值添加到控件名称

时间:2013-03-04 18:02:15

标签: c# asp.net controls

我在页面上有十个标签。我想在页面加载的for循环中使这些看不见。

我试过这个(不起作用):

    for (int i = 0; i < 10; i++)
    {
        my_lbl+i.Visible = false;
    }

因此,应该这样做:

my_lbl1.Visible = false;
my_lbl2.Visible = false;
my_lbl3.Visible = false;
my_lbl4.Visible = false;

等...

有办法做到这一点吗?

6 个答案:

答案 0 :(得分:7)

将所有标签放入集合中:

private List<Label> labels = new List<Label>{my_lbl1, my_lbl2, my_lbl3, my_lbl4};

然后你可以迭代整个集合:

foreach(var label in labels)
    label.Visible = false;

答案 1 :(得分:4)

制作List个;

List<Label> yourlabels = new List<Label>{my_lbl1, my_lbl2, my_lbl3...};

并使用foreach循环使其可见。

foreach(var label in yourlabels)
{
   label.Visible = false;
}

我不知道是否有更好的方法,但这种方式对我来说似乎是合乎逻辑的。

答案 2 :(得分:3)

将标签放入集合中(如前面的答案所示)是一个很好的解决方案。您还可以使用FindControl的{​​{1}}方法按名称检索控件。

Page

答案 3 :(得分:1)

或者,您可以将它们放入dictionary

    Dictionary<string, Label> nameOfDict = new Dictionary<string, Label>();

    nameOfDict.Add("label1", label1);
    nameOfDict.Add("label2", label2);

有关...

nameOfDict ["label" + incrementator].visible = false;

或者,将它们动态创建为标签数组。

答案 4 :(得分:1)

我猜你可以使用Page的FindControl方法:

for (int i = 0; i < 10; i++)
{
    FindControl(string.Format("my_lbl{0}", i)).Visible = false;
}

但是如果当然没有找到控件,请检查案例。

答案 5 :(得分:0)

如果你确定,你想要取消选中组合框中的所有复选框,你也可以这样做:

foreach (var item in groupBox1.Controls)
{
    if (item.GetType() == typeof(CheckBox))
    {
        ((CheckBox)item).Checked = true;
    }
}

使用LINQ:

foreach (var item in groupBox1.Controls.Cast<object>().Where(item => item.GetType() == typeof(CheckBox)))
{
    ((CheckBox)item).Checked = true;
}