c# - 按钮数组的 NullReferenceException

标签 c# arrays multidimensional-array nullreferenceexception

class Puzzle
      {
        private int PUZZLESIZE = 3;
        private int col, row;
        private Button[,] buttons;

        public Puzzle()
        { 
        }

        public Puzzle(Form1 form1)
        {
            buttons = new Button[3, 3] 
            { { form1.button1, form1.button2, form1.button3 }, 
            { form1.button4, form1.button5, form1.button6 }, 
            { form1.button7, form1.button8, form1.button9 } };          
        }

        public void reset()
        {
            for (int i = 0; i < 3; i++)
                for (int j = 0; j < 3; j++)
                {
                    buttons[i, j].BackColor = Color.Lime;
                }
        }

buttons[i, j].BackColor = Color.Lime;

当我在 Form1.cs 中调用重置方法时,此行会导致 NullReferenceException。任何建议表示赞赏!!!

最佳答案

两个问题:

  • form1.button1(等)可能为空。您应该在构造函数中验证这一点。
  • 如果您调用无参数构造函数而不是 Puzzle(Form1) 构造函数,buttons 仍将为 null。我建议您摆脱无参数构造函数。

建议您对所有循环使用大括号,即

for (int i = 0; i < 3; i++)
{
    for (int j = 0; j < 3; j++)
    {
        buttons[i, j].BackColor = Color.Lime;
    }
}

是的,它需要更多空间 - 但根据我的经验,它更清晰且不易出错。

关于c# - 按钮数组的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7886814/

相关文章:

java - 在Java中用n个空的一维列表初始化多维列表

c# - 实时服务器错误上的 woff 字体 MIME 类型

c# - 如何在 ASP.Net Boiler Plate MVC 项目中调用应用服务

arrays - 将命令的输出读入 Bash 中的数组

vb.net - 强类型多维数组/集合

java - Java中灵活大小的多维数组?

c# - GCM ASP.NET Android 教程

c# - 输入流格式不正确

javascript - 循环 2 个数组并将它们的值匹配并输出到 JavaScript 中的一个新的单个数组中

c - 如何打印像网格一样的数组?