winforms 图片框组-如何对齐为网格?

g52tjvyc  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(81)

我有一些图片框,它们是在迭代时添加的。
从数据库表中提取URL,并在添加具有X/Y坐标的PictureBox控件时循环。
经过反复试验,我找到了如何让它们在水平行中对齐,但当我想在11张图片后断开行并继续下面的操作时,问题出现了(Y:第一个图像高度+5(填充)。
我想出了这个公式:

int rowLimit = 11;
Location = new Point(i > 1 ? 27 * i : 0, i > rowLimit ? i * 27 : 0)

这让我得到了这个

太好了。快到了...直到我试着在下面的下一排工作。

我怎么才能把这11个横过来,不管剩下多少行在下面?

int i = 0;
int rowLimit = 11;
foreach (DataRow row in dt.Rows)
{
   i++;
   var picture = new PictureBox
   {
      Name = "pictureBox",
      Size = new Size(25, 25),
      Location = new Point(i > 1 ? 27 * i : 0, i > rowLimit ? i * 27 : 0),
      ImageLocation = "https://example.com/" + row["avatar"].ToString()
   };
   Controls.Add(picture);
}

如果我需要使用柔性面板,请告知。
任何帮助都非常感谢:)

**注意:**忽略损坏的图像,这是预期的,因为一些头像实际上是损坏的(我们稍后处理)。

dfty9e19

dfty9e191#

您可以利用winforms的另一部分,如表或网格数组,但假设您想坚持使用此工具...
看起来该位置的当前Y坐标将垂直堆叠大于rowLimit的所有内容。您可以考虑利用整数除法来获得优势,如下所示:

Location = new Point(i > 0 ? i * (Size.X + 2) : 0, i / rowLimit > 0 ? i * (Size.Y + 2) : 0)

这里,当i在0和10之间时,i / rowLimit将为0,当i在11和21之间时,i / rowLimit将为1,依此类推。

相关问题