2016-04-15 5 views
1

私は13のpictureBoxを表示したいと思いますが、最後のものだけが表示されます。 私は間違った方法でそれをしたのだろうかと思っていました。pictureBox配列を表示する

次のコードは、resourcesフォルダから画像を取得します。

var testP = new PictureBox(); 
for (int i = 0; i < 13; i++) 
{ 
    testP.Width = 65;         
    testP.Height = 80; 
    testP.BorderStyle = BorderStyle.None; 
    testP.SizeMode = PictureBoxSizeMode.StretchImage; 
    test[i] = getImage(testP, testPTemp[i]);    
} 

次のコードは、位置をずらして13個のpictureBoxを表示しようとしています。

これらの2つのコードセグメントは、アクションを実行できる必要があります。

test = new PictureBox[13];  
for (var i = 0; i < 13; i++) 
{ 
    test[i].Image = (Image)Properties.Resources.ResourceManager.GetObject("_" + testTemp[i]);  
    test[i].Left = 330;  
    test[i].Top = 500;  
    test[i].Location = new Point(test[i].Location.X + 0 * displayShift, test[i].Location.Y); 
    this.Controls.Add(test[i]); 
} 

は、ここで私はそこにすべてのPictureBoxコントロールはあるが、彼らはお互いの上に横たわっているように、すべて同じ場所を持っているかなり確信しているのgetImage()

private PictureBox getImage(PictureBox pB, string i)    // Get image based on the for loop number (i) 
    { 
     pB.Image = (Image)Properties.Resources.ResourceManager.GetObject("_" + i);   // Get the embedded image 
     pB.SizeMode = PictureBoxSizeMode.StretchImage; 
     return pB; 
    } 
+1

達成しようとしていることは何ですか? – Aybe

+0

@Aybe私は13個のpictureBoxを表示しようとしていましたが、それは私に最後のものだけを表示するので、間違った方法でそれをしているのだろうかと思っていました。 btw、あなたの返信に感謝します。 – Edwardhk

+0

はい、どのように水平、垂直などの表示をしようとしていますか?*正確に*あなたが必要とするものを説明してください。 – Aybe

答えて

1

です。それが最後のものだけがあなたに見える理由です。

私は0をi変数に置き換えるべきだと思います。

test[i].Location = new Point(test[i].Location.X + i * displayShift, test[i].Location.Y); this.Controls.Add(test[i]); 
+0

私はデバッグしていたときに間違いです それを指摘してくれてありがとう! – Edwardhk

1

あなたが提供したコードに基づいて正確な問題を伝えるのは難しいです。考えられる1つの問題は、PictureBoxを作成するときに、forループの前に1つのインスタンスを作成してから、そのインスタンスへの参照で配列を埋めることです。もう1つの可能性は、コントロールのX位置を計算するときに、0を掛けることです。常に0になります(すべてのコントロールが330にあることを意味します)。

以下は、基本的には何をしようとしていますが、すべてのコードがなくても、より具体的な例を示すことはできません。あなたは、ピクチャボックスのリストを保持する必要がある場合

//Loop through each image 
for(int i = 0; i < testTemp[i].length; i++) 
{ 
    //Create a picture box 
    PictureBox pictureBox = new PictureBox(); 

    pictureBox.BorderStyle = BorderStyle.None; 
    pictureBox.SizeMode = PictureBoxSizeMode.StretchImage; 

    //Load the image date 
    pictureBox.Image = (Image)Properties.Resources.ResourceManager.GetObject("_" + testTemp[i]); 

    //Set it's size 
    pictureBox.Size = new Size(PICTURE_WIDTH, PICTURE_HEIGHT); 

    //Position the picture at (330,500) with a left offset of how many images we've gone through so far 
    pictureBox.Location = new Point(330 + (i * PICTURE_WIDTH), 500); 

    //Add the picture box to the list of controls 
    this.Controls.Add(pictureBox); 
} 

は、ちょうどループの前に新しいリストを作成し、追加関数内であなたのクラス

const int PICTURE_WIDTH = 65; 
const int PICTURE_HEIGHT = 85; 

pictureBoxをループ内のリストに追加します。コントロール/ウィンドウを追加する場合は、PictureBoxを左または右にスクロールしてすべての画像を表示する必要がある場合は、AutoScrollプロパティをtrueに設定します。

+0

omg ...そのようなクリーンなコードで私の問題を解決すると信じられない! ありがとうございました! – Edwardhk