Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在动态PictureBox中存储和访问变量_C# - Fatal编程技术网

C# 在动态PictureBox中存储和访问变量

C# 在动态PictureBox中存储和访问变量,c#,C#,我正在尝试制作一个连接四个游戏,其中所有10x10图片框都是动态创建的。这是我用来创建图片框网格的文本: int[,] gameBoard; Player player; enum Player { RED, BLUE } private void Form1_Load(object sender, EventArgs e) { Size cellSize = new Size(pictureBox1.Width / gridSize, pictureBox1.Heig

我正在尝试制作一个连接四个游戏,其中所有10x10图片框都是动态创建的。这是我用来创建图片框网格的文本:

int[,] gameBoard;
Player player;
enum Player { RED, BLUE }

private void Form1_Load(object sender, EventArgs e)
    {
        Size cellSize = new Size(pictureBox1.Width / gridSize, pictureBox1.Height / gridSize);
        gameBoard = new int[gridSize, gridSize];

        player = Player.RED;
        
        for (int i = 0; i < gridSize; i++)
        {
            for (int j = 0; j < gridSize; j++)
            {
                PictureBox pb = new PictureBox();
                this.Controls.Add(pb);
                pb.Left = i * cellSize.Width;
                pb.Top = j * cellSize.Height;
                pb.BackColor = Color.White;
                pb.BorderStyle = BorderStyle.FixedSingle;
                pb.Width = cellSize.Width;
                pb.Height = cellSize.Height;

                pb.Click += new EventHandler(pb_click);

                void pb_click(object sender, EventArgs e)
                {
                    if (player == Player.RED)
                    {
                        pb.BackColor = Color.Red;
                    }
                    else
                    {
                        pb.BackColor = Color.Blue;
                    }

                    // Change player
                    if (player == Player.RED)
                    {
                        player =  Player.BLUE;
                    }
                    else
                    {
                        player =  Player.RED;
                    }
                }
            }
        }
    }
int[,]游戏板;
玩家;
枚举播放器{红色,蓝色}
私有void Form1\u加载(对象发送方、事件参数e)
{
Size cellSize=新尺寸(pictureBox1.Width/gridSize,pictureBox1.Height/gridSize);
gameBoard=newint[gridSize,gridSize];
player=player.RED;
对于(int i=0;i
我的想法是拥有一个10x10的二维阵列,它可以跟踪放置了什么颜色以及放置在哪里。但为了做到这一点,我需要每个图片框存储2个变量。我希望每个图片框都有一个x和y int变量。单击时,它将获得该图片框的x和y值,并使用该值在相同坐标下更改我的二维数组中的值


因此,我的问题是:如何在动态创建的图片框中存储和访问变量?

您可以创建一个类来封装数据,并将其放入Tag属性中,以便以后在其他地方使用。或者创建一个自定义子PictureBox,或者一个具有PictureBox和所需属性的自定义控件,以便更好地键入、清理以及更健壮的OOP。我不确定我是否理解……您可以创建一个小类(或结构),如
类MyData{int X;Y chain;}
(但您也可以使用)。因此,您可以这样编写:
pb.Tag=newmydata(10,10)
以后这样使用:
((MyData)myPictureBox.Tag).X
。或者,您可以从PictureBox继承来扩展它并添加X&Y。或者,在不进行专门化的情况下,您可以创建自定义控件,并使用VS设计器将PictureBox以及代码中所需的属性放置在其中。什么合适?这很有效!!!!!非常感谢你你是个救命恩人:)使用谷歌翻译的c/c出错:
classmydata{public int X;public int Y;}