3

1ページに10個のラベルがあります。ページ読み込み時の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;

等...

これを行う方法はありますか?

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 に答える