2

次のことを実行できるかどうかを判断するのに苦労しています: for ループを使用して、PictureBox 配列のすべての値を初期化したいと考えています。また、ループ反復子を利用するために割り当てられた値も必要です。例えば:

        PictureBox[] picUserCards = new PictureBox[6];

        for (int i = 0; i < picUserCards.Length; i++)
        {
            // Below is similar to what I have done in VBA 
            picUserCards[i] = picCard + (i + 1);
        }

ご覧のとおり、C# は picCard がこのコンテキストに存在しないというエラーをスローします。ただし、VB/VBA では、文字が連結されて、picUserCards[0] = picCard1 になります。

これは非常に単純な答えかもしれません。まだ何十回も答えられていないことを願っていますが、前兆の検索では、For ループを使用して配列のインデックスを操作する方法以外は何も得られませんでした。

問題があれば、PictureBoxes はフォーム上に既に (12 個) 存在するため、フォームを再設計する代わりに、PictureBoxes を配列に関連付ける方法を理解したいと考えました。

編集: 2 つの配列が必要です。フォーム上のすべての PictureBoxes を取得し、それらを 1 つの配列にダンプするソリューションでは、特定の問題は解決されません。特定の配列に関連付けられるオブジェクトの数を自分で判断できるようにしたいと考えています。

4

2 に答える 2

2

文字列名で子コントロールを参照できます。

this.Controls["picCard" + 7]

これは、直系の子孫に対してのみ機能します。コントロールがネストされている場合は、代わりに を使用する必要がありますがFind、これは少し遅くなります (パフォーマンスを重視しないアプリケーションでは無視できるはずです)。

this.Controls.Find("picCard" + 7, true)
于 2012-11-01T23:17:49.973 に答える
2

プロパティを持つコンテナを使用していると仮定していControlsます:

var picUserCards = this.Controls.OfType<PictureBox>().ToArray();
于 2012-11-01T23:10:22.200 に答える