2

「0」にリセットできるようにしたいフォームにいくつかのラベルがあります。各ラベルを参照して解決しました。配列と for ループも使用しましたが、これはもう少し効率的です。for 変数を使用し、配列なしでラベル名に評価される文字列を作成して、各ラベル名を参照する方法はありますか?

このような:

            for (int x = 0; x < 6; x++)
            lbls[x].Text = "0";

これが私のコードです:

        // Clear form labels
    private void btnClear_Click(object sender, EventArgs e)
    {
        Label[] lbls = new Label[]
        {
            lbl1, lbl2,lbl3,lbl4,lbl5,lbl6
        };

        for (int x = 0; x < 6; x++)
            lbls[x].Text = "0";

        //lbl1.Text = "0";
        //lbl2.Text = "0";
        //lbl3.Text = "0";
        //lbl4.Text = "0";
        //lbl5.Text = "0";
        //lbl6.Text = "0";
    }
4

2 に答える 2

1

他のラベルがない場合:

this.Controls.OfType<Label>()

フォーム上のすべてのラベルが表示されたらIEnumerable、Simonsコードを使用できます。

this.Controls.OfType<Label>().ToList<Label>().ForEach(l => l.Text = "0");
于 2012-11-09T05:58:30.467 に答える
0

リフレクションを使用してオブジェクトを名前で検索し、そのテキストプロパティを「0」に設定する必要があるため、これはさらにコストがかかります。

もっと小さいものが必要な場合は、次の1つのライナーを使用します。

new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 }.ForEach(x => x.Text = "0");

..ちょっとうんざりですが:)

于 2012-11-09T05:58:47.483 に答える