C# 尝试在数组中为c中的板创建PictureBox网格#

C# 尝试在数组中为c中的板创建PictureBox网格#,c#,multidimensional-array,picturebox,C#,Multidimensional Array,Picturebox,我正在尝试使用数组中的图片框制作一个无牌和交叉(tic-tac-toe)游戏的棋盘,我想到的就是这个。当我按下一个按钮时开始 for (int i = 0; i <= 3; i++) { for (int j = 0; j <= 3; j++) { PictureBox[,] pb = new PictureBox[i, j]; pb[i, j].Locat

我正在尝试使用数组中的图片框制作一个无牌和交叉(tic-tac-toe)游戏的棋盘,我想到的就是这个。当我按下一个按钮时开始

for (int i = 0; i <= 3; i++)
        {
            for (int j = 0; j <= 3; j++)
            {
                PictureBox[,] pb = new PictureBox[i, j];
                pb[i, j].Location = new Point(i * 150 + 100, j * 150 + 100);
                pb[i, j].Width = 150;
                pb[i, j].Height = 150;
                pb[i, j].Visible = true;
                pb[i, j].BorderStyle = BorderStyle.FixedSingle;
                pb[i, j].BringToFront();
                this.Controls.Add(pb[i, j]);
            }
        }

这里出了什么问题?

您离这里不远了-您需要在循环之外声明数组,并在每次迭代中创建一张图片-这是有效的(已测试):

PictureBox[,]pb=新的PictureBox[3,3];
对于(int i=0;i<3;i++)
{
对于(int j=0;j<3;j++)
{
pb[i,j]=新的PictureBox();
pb[i,j]。位置=新点(i*150+100,j*150+100);
pb[i,j].宽度=150;
pb[i,j].高度=150;
pb[i,j]。可见=真;
pb[i,j].BorderStyle=BorderStyle.FixedSingle;
pb[i,j].布林托夫隆();
this.Controls.Add(pb[i,j]);
}
}

(注意循环中的逻辑也错误,应该是<3而不是您已经在
for
循环中声明并实例化了多维数组。请尝试以下操作:

PictureBox[,] pb = new PictureBox[3, 3];    
for (int i = 0; i <= 3; i++)
{                
    for (int j = 0; j <= 3; j++)
    {
        pb[i, j] = new PictureBox();
        pb[i, j].Location = new Point(i * 150 + 100, j * 150 + 100);
        pb[i, j].Width = 150;
        pb[i, j].Height = 150;
        pb[i, j].Visible = true;
        pb[i, j].BorderStyle = BorderStyle.FixedSingle;
        pb[i, j].BringToFront();
        this.Controls.Add(pb[i, j]);                    
    }
}
PictureBox[,]pb=新的PictureBox[3,3];

对于(inti=0;i我想说,您创建图片框数组来创建Ticktack-Toe游戏的方法是错误的。另外,您的代码效率很低

在代码中,重复创建冗余阵列

PictureBox[,] pb = new PictureBox[i, j];
您在这里浪费运行时内存

我建议创建一个继承自Picturebox类的新Picturebox类。 将该矩形区域划分为3X3矩阵(根据尺寸) 然后,您需要捕获单击事件并获取要点

  private void pictureBox1_Click(object sender, EventArgs e)
    {
        MouseEventArgs eM = (MouseEventArgs)e;

    //eM.X  -X Coordinate  eM.Y  -Y Coordinate 

    }
使用此坐标标识用户单击的矩阵位置。然后重新绘制整个图片框以反映用户的输入。 这将分离维护picturebox数组的需要,您可以集中精力只维护3X3整数或布尔数组(0或1)。当出现赢的情况时,您只需要在匹配的数组项之间画一条线


使用
Graphics.DrawLine
方法进行此操作

这不就是设置位置的方法吗?这是我在查看其他人代码时想到的方法
PictureBox[,] pb = new PictureBox[i, j];
  private void pictureBox1_Click(object sender, EventArgs e)
    {
        MouseEventArgs eM = (MouseEventArgs)e;

    //eM.X  -X Coordinate  eM.Y  -Y Coordinate 

    }