在面板中动态排列对象
Dynamically arranging objects in a panel
所以我从网站获取图像并将它们存储在 MostUsedHeroesAndImages 中。然后我试图通过动态创建图片框将它们显示在面板上。我如何对其进行编程,以便图片框的创建从 left=0 top=25 开始,然后当显示 10 张图像(每张图像之间有 50 像素)时,它从 at left=0 top=200 开始显示另外 10 张图像等等制作图像网格?我目前有这段代码,它以从左到右的直线显示我的所有图像,它们之间没有间隙。我尝试设置一个起点,但它只是将所有图片存储在彼此之上。对于如何在每个图像之间留出间隙并使其在显示 10 个图像时跳过一行,我不知道。
public void RunMeta()
{
foreach(var mostPickedHero in FetchDataFromDota2Site.MostUsedHeroesAndImages)
{
PictureBox temp = new PictureBox();
temp.ImageLocation = mostPickedHero.ImageSource;
temp.SizeMode = PictureBoxSizeMode.StretchImage;
temp.Left = temp.Width * panel1.Controls.Count;
// temp.Location = new System.Drawing.Point(left, top);
panel1.Controls.Add(temp);
}
}
您可以使用 FlowLayoutPanel 而不是简单的面板 (panel1)。
您只需在 PictureBox 控件上设置 Margin 即可创建间隙。
这是一个随时可用的解决方案,不涉及使图片环绕的代码逻辑。它也可以在调整面板大小时随时使用。
FlowLayoutPanel 的默认行为是从左到右水平放置控件(参见 FlowDirection) and wrap to a new line automatically (see WrapContents)。
请记住,当子控件(您的图片)的数量增长很多时,FlowLayoutPanel 会变得很慢。
所以我从网站获取图像并将它们存储在 MostUsedHeroesAndImages 中。然后我试图通过动态创建图片框将它们显示在面板上。我如何对其进行编程,以便图片框的创建从 left=0 top=25 开始,然后当显示 10 张图像(每张图像之间有 50 像素)时,它从 at left=0 top=200 开始显示另外 10 张图像等等制作图像网格?我目前有这段代码,它以从左到右的直线显示我的所有图像,它们之间没有间隙。我尝试设置一个起点,但它只是将所有图片存储在彼此之上。对于如何在每个图像之间留出间隙并使其在显示 10 个图像时跳过一行,我不知道。
public void RunMeta()
{
foreach(var mostPickedHero in FetchDataFromDota2Site.MostUsedHeroesAndImages)
{
PictureBox temp = new PictureBox();
temp.ImageLocation = mostPickedHero.ImageSource;
temp.SizeMode = PictureBoxSizeMode.StretchImage;
temp.Left = temp.Width * panel1.Controls.Count;
// temp.Location = new System.Drawing.Point(left, top);
panel1.Controls.Add(temp);
}
}
您可以使用 FlowLayoutPanel 而不是简单的面板 (panel1)。 您只需在 PictureBox 控件上设置 Margin 即可创建间隙。 这是一个随时可用的解决方案,不涉及使图片环绕的代码逻辑。它也可以在调整面板大小时随时使用。
FlowLayoutPanel 的默认行为是从左到右水平放置控件(参见 FlowDirection) and wrap to a new line automatically (see WrapContents)。
请记住,当子控件(您的图片)的数量增长很多时,FlowLayoutPanel 会变得很慢。