我知道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);
}
}
}
答案 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);
}
}