显示pictureBox数组

时间:2016-04-15 16:08:25

标签: c# arrays picturebox

我想显示13个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;
    }

2 个答案:

答案 0 :(得分:1)

我很确定所有的PictureBox控件都有,但它们的位置相同,所以它们位于彼此之上。这就是为什么只有最后一个是可见的。

我认为你应该用i变量替换0。

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

答案 1 :(得分: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