NullReferenceException在C#中未处理

Ara*_*ash -1 c# exception-handling winforms

我在第一行评论中采用了这个错误,问题是什么?

private void pictureBox34_Click(object sender, EventArgs e)
{
    if (pictureBox34.Image == chess9.Properties.Resources.siyahsah2)
    {
        f();
    }
}

public void picarray()
{
    pic[0, 0] = pictureBox54;
    pic[0, 1] = pictureBox64;
    pic[0, 2] = pictureBox48;
    pic[0, 3] = pictureBox42;
    pic[0, 4] = pictureBox34;
    pic[0, 5] = pictureBox26;
    pic[0, 6] = pictureBox18;
    pic[0, 7] = pictureBox8;
    pic[1, 0] = pictureBox1;
    pic[1, 1] = pictureBox2;
    pic[1, 2] = pictureBox3;
    pic[1, 3] = pictureBox4;
    ...
}

public void f()
{
    // int i = 0, j = 0;
    int x = 3;
    int y = 3;

    for (int i = 1; i < x; i++)
    {
        for (int j = 1; j < y; j++)
        {
            pic[i, j] = new PictureBox();
            // pic[i, j] = pic[i + 1, j + 1];
            pic[i, j].Image = chess9.Properties.Resources.siyahsah2;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ran*_*Ran 6

我碰巧读了你以前的问题,所以如果我理解正确,这是一个国际象棋游戏的实现.

我建议您对设计进行一些更改,而不是尝试修复此代码中的异常.

主要变化:将游戏板状态的表示与UI层分开.如果我理解正确,您使用PictureBox对象数组来表示板上的碎片.如果编写代表板,片段及其所有操作的类,然后编写可在窗口中显示这些类的单独代码,并通过UI从用户处获取命令,则可能会更好.

当您通过操纵UI对象实现棋子移动和棋盘更新时,您必然会犯更多错误并花费更多时间进行调试.

我希望有帮助......