2016-04-15 4 views
1

Я бы хотел отобразить 13 pictureBox, однако в итоге он отображается только последним. Так что мне было интересно, если я сделал это неправильно.Отображение массива pictureBox

Следующий код получить изображение из папки ресурсов.

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 со смещением.

Эти сегменты двух кодов должны иметь возможность выполнять действие.

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]); 
} 

Вот 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

@ Я пытался отобразить 13 pictureBox, но это только показывает мне последнее, поэтому мне было интересно, если я сделаю это неправильно. btw, спасибо за ваш ответ – Edwardhk

+0

Да, но как вы пытаетесь отобразить, горизонтально, вертикально и т. д. ... объясните * точно *, что вам нужно. – Aybe

ответ

1

Я довольно уверен, что есть все элементы управления PictureBox, но они все в том же месте, так что они, лежа друг над другом. Вот почему видна только последняя.

Я думаю, вы должны заменить 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

Трудно сказать точную проблему, основанную на коде, который вы предоставили. Одна из возможных проблем может заключаться в том, что при создании PictureBox es вы создаете только один экземпляр перед циклом for, а затем заполняете массив ссылками на этот экземпляр. Другая возможность заключается в том, что когда вы вычисляете положение X элементов управления, вы умножаетесь на 0, который всегда будет равен 0 (это означает, что все элементы управления находятся в позиции 330).

Ниже приведен код, который будет в основном выполнять то, что вы пытаетесь, но без вашего кода. Я не могу дать вам более конкретный пример.

в классе

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

Внутри вы действуете

//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); 
} 

Если вам нужно сохранить список графических блоков, просто создать новый список перед циклом и добавить каждый pictureBox к списку внутри цикла. Если в окне управления/окном вы добавляете эти PictureBox es, вам необходимо прокрутить влево или вправо, чтобы увидеть все изображения, которые устанавливают AutoScroll на true.

+0

omg ... не могу поверить, что вы решаете мои проблемы с таким чистым кодом! Спасибо, человек !! – Edwardhk

Смежные вопросы