按钮数组的NullReferenceException

本文关键字:NullReferenceException 数组 按钮 | 更新日期: 2023-09-27 18:12:13

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中调用reset方法时,

这一行导致NullReferenceException。任何建议都很感激!!

按钮数组的NullReferenceException

两个问题:

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

I'd 还建议所有循环使用大括号,即

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

是的,它占用更多的空间,但在我的经验中,它更清晰,更不容易出错。

您确定正在调用默认构造函数吗?看起来您的类需要Form1实例才能运行,因此请尝试删除默认构造函数。如果构建失败,你就得到了答案!