3

我在一页上有十个标签。我想让这些在页面加载时的 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;

ETC...

有没有办法做到这一点?

4

6 回答 6

7

将所有标签放入一个集合中:

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

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

foreach(var label in labels)
    label.Visible = false;
于 2013-03-04T18:04:53.777 回答
4

做一个List

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

并使用foreach循环使它们可见。

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

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

于 2013-03-04T18:06:47.173 回答
3

将标签放在集合中(如先前的答案所建议的那样)是一个很好的解决方案。您还可以使用FindControl.Page

for (int i = 0; i < 10; i++)
{
    this.FindControl("my_lbl" + i.ToString()).Visible = false;
}
于 2013-03-04T18:10:52.820 回答
1

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

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

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

为了...

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

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

于 2013-03-04T18:10:52.007 回答
1

我想你可以利用 Page 的 FindControl 方法:

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

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

于 2013-03-04T18:12:07.783 回答
0

如果您确定要取消选中groupbox 中的所有复选框,也可以这样做:

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;
}
于 2013-03-04T18:09:16.347 回答