按代码创建大量PictureBox – 只有一个是可见的

我试图使用以下代码绘制大量图像实例:

PictureBox[] sprites = new PictureBox[100]; private void Game_Load(object sender, EventArgs e) { PictureBox mainSprite = new PictureBox(); Bitmap img = new Bitmap(SpriteTest.Properties.Resources.Image); //Load a png image mainSprite.Size = new Size(16, 16); mainSprite.Image = img; for(var i = 0; i < sprites.Length; i++) { sprites[i] = mainSprite; //Keeping it simple for now with a single row of sprites sprites[i].Location = new Point(i * 16, 8); } Game.ActiveForm.Controls.AddRange(sprites); } 

在运行代码时,只显示最后一张图像。 在调试代码时,一切似乎都按预期工作。 我还可以validation该位置实际上是否正在更新。

我还尝试使用for循环中的以下代码以不同的方式添加控件(没有运气);

 this.Controls.Add(sprites[i]); 

我多次遇到过这个问题,特别是当我尝试以类似的方式创建许多GroupBox时。 在我试图找到解决方案时,我在网上搜索了几个小时,没有任何修复过。

您实际上只是创建了一个PictureBox实例:

 PictureBox mainSprite = new PictureBox(); ... for(var i = 0; i < sprites.Length; i++) { sprites[i] = mainSprite; 

您的数组将有很多对同一对象的引用。 您应该在循环的每次迭代中创建一个新的 PictureBox

 for(var i = 0; i < sprites.Length; i++) { PictureBox mainSprite = new PictureBox(); mainSprite.Size = new Size(16, 16); mainSprite.Image = img; sprites[i] = mainSprite; ... }