1

我知道pictureBox 一次只能显示一张图片。我正在尝试为我的收藏中的每个图像创建一个图片框。例如,如果我的列表中有十个图像,那么该方法应该为这些相应的图像创建十个图片框,以便每个图片都显示在一个图片框中。我不确定哪个会更好 for 循环或 foreach 循环。每次循环增加变量 XCoordinate 和 YCoordinate 时,PictireBox 的位置都应该增加,这样 PictureBox 就不会在表单中相互重叠。该方法的原因是每次应用程序运行时,集合中的图像数量都会发生变化。这就是我不手动创建它们的原因。所以在它完成后,列表中的所有图片都应该出现在一个picture.Box中。盒子的大小应该一样,唯一的区别是表单上的位置和它们里面的图像组成了多个图片框。请任何帮助,我将不胜感激

什么应该看起来像http://imageshack.us/photo/my-images/41/59536200.png/继承人感谢我正在处理的代码 onsoltion 大帮助。

public List<Image> returnImagesInList()
{
   return this.images;
}



private void createPictureBoxesForImages()
{

        foreach (Image file in  retrurnImagesInList())
        {
            try
            {
                int XCoordinate = 10;
                XCoordinate++;
                int YCoordinate = 5;
                YCoordinate++;
                PictureBox imageControl = new PictureBox();
                imageControl.Height = 100;
                imageControl.Width = 100;

                imageControl.Visible = true;
                imageControl.Location = new Point(XCoordinate, YCoordinate);
                Controls.Add(imageControl);
                imageControl.Image = file;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message);
            }
        }
}
4

1 回答 1

1

对于每个图片框,您只在 x 和 y 坐标中增加一个,并且它应该大于或等于 pictureobx 的宽度和高度。您在迭代中使用相同的值初始化坐标并带您回到开始的位置。

您需要将初始化从侧循环中取出,并给予比宽度更大的增量。当图片框到达表单的右端时,您必须增加 y 坐标。

int XCoordinate = 10;
int YCoordinate = 5;
foreach (Image ile in  retrurnImagesInList())
{
    try
    {   
        PictureBox imageControl = new PictureBox();
        imageControl.Height = 100;
        imageControl.Width = 100;
        XCoordinate += imageControl.Width+2;
        if(XCoordinate  > this.Width - imageControl.Width)
        {
            YCoordinate += imageControl.Height + 2;
            XCoordinate = 10;
        }
        imageControl.Visible = true;
        imageControl.Location = new Point(XCoordinate, YCoordinate);
        Controls.Add(imageControl);
        imageControl.Image = file;
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error: " + ex.Message);
    }
}
于 2012-12-02T04:32:40.877 回答