0

1 サイクルで多くのピクチャボックスを操作する必要があります。これどうやってするの?私はこれを試しました:

    for (int i = 1; i <= 10; i++)
    {
        PictureBox[] pb = new PictureBox[i];
        pb[i].Image = global::Ippodrom.Properties.Resources.horse;
    }

しかし、それは次のようにクラッシュします:

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Ippodrom.exe

Additional information: Index was outside the bounds of the array.

何をすればよいでしょうか?

UPD:新しいピクチャボックスを作成するのではなく、作成したピクチャボックスのピクチャを変更する必要があります。

4

3 に答える 3

2

フォーム上の既存のピクチャボックスをループする必要があります。

この手順では、ピクチャボックスがフォーム上にあり、パネルなどの別のコンテナーにないことを前提としています。その場合は、それに応じてこのコードを調整します。

foreach (PictureBox pb in this.Controls.OfType<PictureBox>()) {
  pb.Image = global::Ippodrom.Properties.Resources.horse;
}
于 2012-04-11T18:00:03.480 に答える
0

必要なのは、10個のPictureBoxの配列を作成し、それぞれを初期化することです。

これまでに行ったことは、それぞれサイズNの10個の配列を作成することです。ここで、Nは[1..10]です。

配列を作成することから始めます。

PictureBox[] pb = new PictureBox[10];

これで、10個のPixtureBox参照の配列ができました。それらのそれぞれは、値'null'を保持します。

for (int i = 0; i < 10; i++) // C# arrays are zero-indexed, not one
{
    // Create a new PictureBox and assign it to the array
    pb[i] = new PictureBox();

    // Assign an image to this new PictureBox
    pb[i].Image = global::Ippodrom.Properties.Resources.horse;
}

IndexOutOfRangeExceptionは、ゼロではなく1ベースのインデックスを使用したために発生しますが、コードに最初から欠陥があったため、関係ありません。

于 2012-04-11T17:38:44.590 に答える
0

PictureBox の配列を作成する場合、インスタンスは作成されません。インスタンスへの参照を保持するための「スペース」のみを宣言します。

あなたがやろうとしていることはこれだと思います(しかし、私は間違っているかもしれません)

PictureBox[] pb = new PictureBox[10]; // creates space for 10 elements, first one is 0
for(int i = 0; i < 10; i++) { // from 0..9 
    pb[i] = new PictureBox(); // we create the actual thing
    pb[i].Image = global::Ippodrom.Properties.Resources.horse;
}

ここでリストを使用する方がおそらくはるかに簡単です

IList<PictureBox> pb = new List<PictureBox>();
for(int i = 0; i < 10; i++) { // if you want exactly 10
    var theBox = new PictureBox();
    theBox.Image = global::Ippodrom.Properties.Resources.horse;
    pb.add(theBox);
}

それらを変更したい場合

IList<PictureBox> pb = new List<PictureBox>() { pictureBox1 /* etc */ };
foreach(PictureBox p in pb) {
    p.Image = global::Ippodrom.Properties.Resources.horse;
}

コントロール内のすべてのPictureboxが必要な場合は、LarsTechのを使用してください:)

于 2012-04-11T17:45:03.077 に答える