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) { } } }
额外提示
- 避免绝对路径问题:可以将图片添加到项目资源中,通过
Properties.Resources.flower直接引用,这样程序移植时不会出现路径错误。 - 资源释放优化:使用
Image.FromFile会锁定源文件,建议在不需要图片时调用Dispose()释放资源,或者改用Image.FromStream读取资源文件。
内容的提问来源于stack exchange,提问作者i am Dubers
相关产品推荐
相关产品推荐

