C# 图片框始终抛出未设置为对象错误实例的对象引用

C# 图片框始终抛出未设置为对象错误实例的对象引用,c#,C#,我有一个班级,里面有一个图片盒。我已经创建了类的一个对象数组,但是当我尝试创建一个新的图片框时,我得到一个错误,声明object reference没有设置为object的实例 下面是我如何创建pictureboxes的 GreyHound[] dog; public Form1() { InitializeComponent(); dog[1].MyPictureBox = new PictureBox(); dog[1].MyPi

我有一个班级,里面有一个图片盒。我已经创建了类的一个对象数组,但是当我尝试创建一个新的图片框时,我得到一个错误,声明object reference没有设置为object的实例

下面是我如何创建pictureboxes的

 GreyHound[] dog;

    public Form1()
    {
       InitializeComponent();
       dog[1].MyPictureBox = new PictureBox();
       dog[1].MyPictureBox = pictureBox1;

       dog[2].MyPictureBox = new PictureBox();
       dog[2].MyPictureBox = pictureBox2;

       dog[3].MyPictureBox = new PictureBox();
       dog[3].MyPictureBox = pictureBox3;

       dog[4].MyPictureBox = new PictureBox();
       dog[4].MyPictureBox = pictureBox4;
编辑代码:

灰狗

    public Form1()
    {

       InitializeComponent();
       dog = new GreyHound[4];
       dog[0].MyPictureBox = new PictureBox();
       dog[0].MyPictureBox = pictureBox1;

       dog[1].MyPictureBox = new PictureBox();
       dog[1].MyPictureBox = pictureBox2;

       dog[2].MyPictureBox = new PictureBox();
       dog[2].MyPictureBox = pictureBox3;

       dog[3].MyPictureBox = new PictureBox();
       dog[3].MyPictureBox = pictureBox4;



    }

您不会在以下任何位置初始化阵列:

dog = new GreyHound[4];
数组索引也从0开始,因此:

dog[0].MyPictureBox = new PictureBox();
dog[0].MyPictureBox = pictureBox1;

dog[1].MyPictureBox = new PictureBox();
dog[1].MyPictureBox = pictureBox2;

dog[2].MyPictureBox = new PictureBox();
dog[2].MyPictureBox = pictureBox3;

dog[3].MyPictureBox = new PictureBox();
dog[3].MyPictureBox = pictureBox4;

您不会在以下任何位置初始化阵列:

dog = new GreyHound[4];
数组索引也从0开始,因此:

dog[0].MyPictureBox = new PictureBox();
dog[0].MyPictureBox = pictureBox1;

dog[1].MyPictureBox = new PictureBox();
dog[1].MyPictureBox = pictureBox2;

dog[2].MyPictureBox = new PictureBox();
dog[2].MyPictureBox = pictureBox3;

dog[3].MyPictureBox = new PictureBox();
dog[3].MyPictureBox = pictureBox4;

您的代码有几个严重问题:

  • 出现
    NullReferenceException
    的原因有两个:
  • 您声明了一个
    灰狗
    数组,但从未初始化它。这意味着,
    dog
    null
    ,尝试访问
    dog[1]
    会导致null引用异常
  • 如果您要解决这个问题,您仍然会遇到另一个问题:
    假设
    GreyHound
    是引用类型,这意味着您必须为数组中的每个项目创建一个实例。使用当前代码,数组中的所有项都是
    null
    ,这导致在尝试访问数组中任何项的属性
    MyPictureBox
    时出现
    null引用异常,因为
    dog[1]
    将是
    null
  • 对于数组中的每个项目,首先将
    PictureBox
    的新实例指定给属性
    MyPictureBox
    ,但在下一行用
    PictureBox
    覆盖该值
  • 在C#中,数组的索引为零,因此第一项的索引为0,而不是1
  • 按如下方式修复代码:

    GreyHound[] dog = new GreyHound[4]; // solves problem 1.1
    
    dog[0] = new GreyHound(); // solves problem 1.2
    dog[0].MyPictureBox = pictureBox1;
    
    dog[1] = new GreyHound(); // solves problem 1.2
    dog[1].MyPictureBox = pictureBox2;
    
    dog[2] = new GreyHound(); // solves problem 1.2
    dog[2].MyPictureBox = pictureBox3;
    
    dog[3] = new GreyHound(); // solves problem 1.2
    dog[3].MyPictureBox = pictureBox4;
    

    您的代码有几个严重问题:

  • 出现
    NullReferenceException
    的原因有两个:
  • 您声明了一个
    灰狗
    数组,但从未初始化它。这意味着,
    dog
    null
    ,尝试访问
    dog[1]
    会导致null引用异常
  • 如果您要解决这个问题,您仍然会遇到另一个问题:
    假设
    GreyHound
    是引用类型,这意味着您必须为数组中的每个项目创建一个实例。使用当前代码,数组中的所有项都是
    null
    ,这导致在尝试访问数组中任何项的属性
    MyPictureBox
    时出现
    null引用异常,因为
    dog[1]
    将是
    null
  • 对于数组中的每个项目,首先将
    PictureBox
    的新实例指定给属性
    MyPictureBox
    ,但在下一行用
    PictureBox
    覆盖该值
  • 在C#中,数组的索引为零,因此第一项的索引为0,而不是1
  • 按如下方式修复代码:

    GreyHound[] dog = new GreyHound[4]; // solves problem 1.1
    
    dog[0] = new GreyHound(); // solves problem 1.2
    dog[0].MyPictureBox = pictureBox1;
    
    dog[1] = new GreyHound(); // solves problem 1.2
    dog[1].MyPictureBox = pictureBox2;
    
    dog[2] = new GreyHound(); // solves problem 1.2
    dog[2].MyPictureBox = pictureBox3;
    
    dog[3] = new GreyHound(); // solves problem 1.2
    dog[3].MyPictureBox = pictureBox4;
    

    这只是一个摘录,如果没有任何意义,那么我希望你们能把我放在正确的轨道上,而不是负面评价这个问题。我已经删除了那个评论,并提供了一个答案:谢谢。我已经初始化了数组,但它仍然不工作。请阅读我的整个答案并执行所有步骤。自从我发表评论后,我已经更新了它。如果这没有帮助,请发布准确的错误。这只是一个摘录,如果没有任何意义,那么我希望你们能让我走上正确的轨道,我没有负面评价这个问题。我已经删除了那个评论,并提供了一个答案:谢谢。我已经初始化了数组,但它仍然不工作。请阅读我的全部答案并执行所有步骤。自从我发表评论后,我已经更新了它。如果这没有帮助,请发布准确的错误。非常感谢,问题已经解决了,现在我也明白了我没有错的地方。再次感谢你完美的解释:)非常感谢,问题已经解决了,现在我也明白我错在哪里了。再次感谢您的完美解释:)