You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm中用嵌套循环生成5×5图片网格却显示为1×25的问题求助

解决WinForm中5×5图片网格排列成一行的问题

你的代码核心问题在于行循环结束后没有重置列的起始坐标,也没有切换到下一行的垂直位置,导致所有PictureBox都在第一行连续排列,无法形成5行5列的网格。

修正方案

在外层行循环中,每次开始新行时将x重置为0(回到当前行的起始水平位置),当前行所有列处理完成后,将y增加图片高度(切换到下一行的垂直位置):

namespace Ovning1._3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            int x = 0, y = 0, width = 50, height = 50;
            PictureBox[,] pictures = new PictureBox[5,5];
            for (int r = 0; r < 5; r++)
            {
                // 开始新行时,重置x到当前行的起始位置
                x = 0;
                for (int c = 0; c < 5; c++)
                {
                    pictures[r,c] = new PictureBox();
                    pictures[r,c].Left = x;
                    pictures[r,c].Top = y;
                    pictures[r,c].Width = width;
                    pictures[r,c].Height = height;
                    pictures[r,c].BackgroundImage = Image.FromFile("C:\\Users\\iamdu\\Documents\\School\\Programmering 2\\Ovning1.3\\Ovning1.3\\resources\\images\\flower.jpg");
                    pictures[r,c].Click += PbxFlower_Click;

                    this.Controls.Add(pictures[r,c]);
                    x += width;
                }
                // 当前行所有列处理完后,y增加高度,切换到下一行
                y += height;
            }
        }

        private void PbxFlower_Click(object sender, EventArgs e)
        {
            PictureBox clickedFlower = (PictureBox)sender;
            clickedFlower.BorderStyle = BorderStyle.FixedSingle;
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
    }
}

额外提示

  1. 避免绝对路径问题:可以将图片添加到项目资源中,通过Properties.Resources.flower直接引用,这样程序移植时不会出现路径错误。
  2. 资源释放优化:使用Image.FromFile会锁定源文件,建议在不需要图片时调用Dispose()释放资源,或者改用Image.FromStream读取资源文件。

内容的提问来源于stack exchange,提问作者i am Dubers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 05:30:02