2016-02-04 3 views
0

Это создает PictureBoxСкрытие массив PictureBox C#

PictureBox[][] picturebox; 

public void loadPictureBox() 
{ 
    string path = @"../../Images/Catelogue/"; //set pathing 
    string[] list = Directory.GetFiles(path, "*.jpg"); 
    //pictureboxCatelogue = new PictureBox[list.Length]; 
    //pictureboxCosplay = new PictureBox[list.Length]; 

    picturebox = new PictureBox[4][]; 

    for (int i = 0; i < 4; i++) 
    { 
     picturebox[i] = new PictureBox[list.Length]; 

     int y = 85, temp = 220, run = 0; 
     for (int index = 13; index < list.Length; index++) // loads all pictures and create pictureboxes 
     { 
      picturebox[i][index] = new PictureBox(); 
      picturebox[i][index].Image = Image.FromFile(path + index + ".jpg"); 

      this.Controls.Add(picturebox[i][index]); 
      temp = temp + 200; 

      if (index % 4 == 0) 
      { 
       if (run != 0) 
        y = y + 200; 
       run++; 
       temp = 220; 
      } 

      picturebox[i][index].Location = new Point(temp, y); 
      picturebox[i][index].Size = new Size(180, 180); 
      picturebox[i][index].Name = Convert.ToString(index); 
      picturebox[i][index].SizeMode = PictureBoxSizeMode.Zoom; 
      picturebox[i][index].BackColor = Color.FromArgb(35, 35, 35); 
      picturebox[i][index].Click += new System.EventHandler(PictureBox_Click); 
     } 
    } 
} 

Я пытаюсь скрыть неровный массив, который является PictureBox в winsform C#, но я получаю сообщение об ошибке, скрывается зазубренный массив возможно? Это код, с которым у меня проблемы.

for (int i = 0; i < picturebox.Length; i++) 
{ 
    picturebox[0][i].Hide(); 
} 

Это ошибка я получаю

ОШИБКА: Первый шанс, исключение типа «System.NullReferenceException» произошло в APPD Назначение 2.exe (Дополнительная информация: Ссылка на объект не указывает на экземпляр объекта.)

ответ

0

Не используете ли вы неправильную длину здесь?

for (int i = 0; i < picturebox.Length; i++) 

Должно быть

for (int i = 0; i < picturebox[0].Length; i++) 

При загрузке PictureBoxes, вы только начиная с индекса 13, поэтому вы либо должны начать цикл скрыть на 13, или проверить нуль.

for (int i = 13; i < picturebox[0].Length; i++) 
{ ... } 

или

for (int i = 0; i < picturebox[0].Length; i++) 
{ 
    if (picturebox[0][i] != null) 
    { 
     picturebox[0][i].Hide(); 
    } 
} 
+0

Хорошее место, но я думаю, что он также начинает свой индекс для 2-го измерения массива в 13 так до сих пор думаю, что вам может понадобиться, чтобы начать я на 13 или на нулевой чек. –

+0

Я попытался перейти на это, но есть еще ошибка: c ошибка указывает на Hide(); часть кода –

+0

извините, что 13 был для тестирования, он должен был начинать с 0, мой плохой! ''>. < –