0

ピクチャボックスを保持するクラスがあります。クラスのオブジェクトの配列を作成しましたが、新しい画像ボックスを作成しようとすると、オブジェクト参照がオブジェクトのインスタンスに設定されていないというエラーが表示されます。

これが私がピクチャボックスを作成する方法です

 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;



    }
4

2 に答える 2

3

あなたが持っているコードには、いくつかの重大な問題があります:

  1. あなたの理由NullReferenceExceptionは2つあります:
    1. の配列を宣言しGreyHoundますが、初期化することはありません。つまり、結果にアクセスしようとするとdog、NullReferenceException が発生します。nulldog[1]
    2. それを修正しても、別の問題が残ります。それが参照型である
      と仮定するとGreyHound、配列内の各項目のインスタンスを作成する必要があります。現在のコードでは、配列内のすべてのアイテムは、配列内の任意のアイテムのプロパティにアクセスしようとするとnull、になります。NullReferenceExceptionMyPictureBoxdog[1]null
  2. 配列内のすべての項目について、最初に の新しいインスタンスをPictureBoxプロパティに割り当てますMyPictureBoxが、次の行でその値を で上書きしますpictureBoxX
  3. C# では、配列のインデックスは 0 であるため、最初の項目のインデックスは 1 ではなく 0 です。

コードを次のように修正します。

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;
于 2013-05-28T06:55:00.280 に答える
2

配列をどこにも初期化しません。

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;
于 2013-05-28T06:54:11.173 に答える