使用递增的整数重复创建对象

时间:2014-02-07 12:58:04

标签: c# grid integer picturebox

我想在表单上创建一个图片框网格并命名为:“sqr”+ i +“_”+ j其中i =水平方格的数字,j =垂直方格的数字所以我可以轻松识别每个方块并知道它在表格中的位置。

目前,我正在逐个手动完成,复制并粘贴代码并为每个方块修改代码,但我不得不相信有一种更简单的方法。我对所有建议持开放态度,因为我相对(6个月)对C#不熟悉。

我想代码看起来像这样,至少,这就是我希望它在理论上工作的方式:

for (i = 1; i <= 20; i++)
{
  currentSpawnLocationX = currentSpawnLocationX + 40;
  currentSpawnLocationY = 0;
  for (j = 1; j <= 20; j++)
  {
    PictureBox sqri_j = new PictureBox();
    sqri_j.Location = new System.Drawing.Point(currentSpawnLocationX, currentSpawnLocationY);
    sqri_j.Size = new System.Drawing.Size(40, 40);
    currentSpawnLocationY = currentSpawnLocationY + 40;
  }
}

任何指针都会非常感激。如果它可以以完全不同的方式重新完成而且我做错了,我很想知道。

谢谢!

1 个答案:

答案 0 :(得分:0)

正如Jon Skeet所说,二维阵列是你最好的选择。

会是这样的:

PictureBox[,] sqr = new PictureBox[20,20];

for (i = 1; i <= sqr.GetLength(0); i++)
{
    currentSpawnLocationX = currentSpawnLocationX + 40;
    currentSpawnLocationY = 0;
    for (j = 1; j <= sqr.GetLength(1); j++)
    {
        sqr[i, j] = new PictureBox();
        sqr[i, j].Location = new System.Drawing.Point(currentSpawnLocationX, currentSpawnLocationY);
        sqr[i, j].Size = new System.Drawing.Size(40, 40);
        currentSpawnLocationY = currentSpawnLocationY + 40;
    }
}

<小时/> 编辑您在评论中提出的问题: 为此,我将创建一个带有预加载资源的数组,如下所示(使用资源命名约定):

Image[,] images = new Image[20,20];

for (i = 1; i <= images.GetLength(0); i++)
{
    for (j = 1; j <= images.GetLength(1); j++)
    {
         images = (Image)Tileset.ResourceManager.getObject(string.format("image_resource_name_{0}_{1}", i ,j));                          
    }
}

这样你可以像这样初始化你的图片框:

sqr[i, j].Image = images[i, j]

您可以轻松地将其与原始答案的图片框初始化合并。