簡體   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