0

以下のコードは、フォームラベルを「0」にリセットします。好奇心から、リスト内のすべてのアイテムではなく、特定のアイテムのみにアクセスする方法を見つけようとしています。foreach関数はここではうまく機能しますが、コードの他の部分では、これらのオブジェクトに異なる方法でアクセスして変更したいと思います

たとえば、1つおきのフィールドを「0」に設定したり、最後または最初の3つだけを何らかの値に設定したりするにはどうすればよいでしょうか。

// Set the form Labels to "0"
private void btnClear_Click(object sender, EventArgs e)
{
    // Create List of Labels for modifying form
    new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 }.ForEach(p => p.Text = "0");
}

ありがとうございました

アップデート:

たくさん読んでテストした後、リスト内の他のすべての項目を選択するための最も基本的な方法に戻りました。

        // Set the form Labels to "0"
    private void btnClear_Click(object sender, EventArgs e)
    {
        // Create List of Labels for modifying form
        List<Label> lbl = new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 };
        int x =1; //  Set to get every other label. 0 = even, 1 = odd
        while (x < lbl.Count)
        {
            lbl[x].Text = "0";
            x = x + 2;
        }

@ジョナサンウッドはこれに方法があります items.ForEach(p => { some code(), p.Text = "0"; });

4

4 に答える 4

4

渡すデリゲートForEach()は中括弧で囲むことができます。これにより、ifステートメントなどのより複雑なロジックを定義できます。

items.ForEach(p => { if (p != null) p.Text = "0"; });

デリゲートを別のメソッドとして定義し、それを渡すこともできます。

しかし、あなたのアプローチについては疑問に思います。これはWinFormsアプリですか?フォーム上のコントロールをループする通常のループを実行しないのはなぜですか?そうすれば、追加のテーブルは必要ありません。

于 2012-11-11T18:26:09.303 に答える
3

1つおきのフィールドを「0」に設定するには、IEnumerable.Whereオーバーロードを試して、現在の要素のインデックスを述語に渡します。

奇数のインデックスを持つ要素で作業したいとします。

new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 }.Where((p, i) => (i & 1) == 1).ToList().ForEach(p => p.Text = "0");
于 2012-11-11T18:44:21.503 に答える
2

Linqを使用できます:

最初の3つ:

var labels = new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 };
foreach(Label lbl in labels.Take(3))
    lbl.Text = someValue;

最後の3つ:

foreach(Label lbl in labels.Reverse().Take(3))
    lbl.Text = someValue;

他のラベル:

var allLabels = this.Controls.OfType<Label>();
var otherLabels = allLabels.Except(labels);
foreach(Label lbl in otherLabels)
    lbl.Text = "0";
于 2012-11-11T18:24:48.127 に答える
1

最初の3を0に設定します

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

最後の3を0に設定

new List<Label>() { lbl1, lbl2, lbl3, lbl4, lbl5, lbl6 }.Skip(3).Take(3).ForEach(p => p.Text = "0");
于 2012-11-11T18:25:45.207 に答える