繁体   English   中英

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

[英]Picture box always throws object reference not set to instance of object error

我有一堂课,里面有一个画框。 我已经创建了我的类的对象数组,但是当我尝试创建新的图片框时,出现错误提示,对象引用未设置为对象的实例。

这是我创建图片框的方式

 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;

编辑代码:

GreyHound []狗;

    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;



    }

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

  1. NullReferenceException的原因有两个:
    1. 您声明了GreyHound数组,但从未对其进行初始化。 这意味着该dognull并且尝试访问dog[1]导致NullReferenceException。
    2. 如果要解决此问题,您仍然会遇到另一个问题:
      假设GreyHound是引用类型,则意味着您将必须为数组中的每个项目创建一个实例。 使用您当前的代码,数组中的所有项目均为null ,这会导致在尝试访问数组中任何项目的属性MyPictureBox时导致NullReferenceException ,因为dog[1]null
  2. 对于数组中的每个项目,首先要为属性MyPictureBox分配一个PictureBox的新实例,但是在下一行使用pictureBoxX覆盖该值。
  3. 就像我们在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;

您不会在任何地方初始化数组:

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM