多个盒子C#

时间:2012-12-02 04:25:45

标签: c# winforms

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

应该是什么样的http://imageshack.us/photo/my-images/41/59536200.png/ Heres感谢我正在努力提供帮助的代码。

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

1 个答案:

答案 0 :(得分: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);
    }
}