Новый в C #, нулевой объект picturebox в массиве picturebox? - PullRequest
0 голосов
/ 17 октября 2011

Я только запускаю C # и создаю свою первую игру, но столкнулся с проблемой.У меня есть массив Picturebox

PictureBox[] obstacles = new PictureBox[20];

И я пытаюсь объявить в нем 20 новых коробок с картинками случайного расположения.

    private void Game_Load(object sender, EventArgs e)
    {
        player.Size = new Size(20, 20);
        player.Location = new Point(20, 240);
        player.Image = Properties.Resources.playerImg;
        Controls.Add(player);

        for (int i = 0; i < 20; i++)
        {
            obstacles[i] = new PictureBox();
            obstacles[i].Size = new Size(10, 10);
            obstacles[i].Location = new Point(50, 340);
            obstacles[i].BackColor = Color.Red;
            Controls.Add(obstacles[i]);
        }
    }

Я знаю, что это еще не порождает их в случайном месте,но я не буду этого делать, пока не заставлю их вообще появиться.Теперь, когда я пытаюсь создать метод для использования массива picturebox, все его объекты (picturebox [0-19]) просто равны нулю?

private void JustAnOtherTest(PictureBox obj)
{
    for (int y = obj.Top; y < obj.Top + obj.Height - 1; y++)
    {
        MessageBox.Show("Testing out!", "Test");
    }
}

Теперь вызывается: JustAnOtherTest (препятствия [1]);и добавление watch для obj в метод JustAnOtherTest просто даст мне ноль, почему это так?

EDIT: похоже, что он никогда не входит в цикл for, потому что он выходит из Game_Load, как только попадает в player.Image =Properties.Resources.playerImg;что, вероятно, означает, что проблема в файлах ресурсов ...: S

EDIT2: Да, я был прав, проблема была в файлах ресурсов.Я испортил некоторые пространства имен, и он не смог найти файл ресурсов, потому что он находился в другом пространстве имен, но я не уверен, почему он не выдал ошибку.Однако после исправления всех пространств имен все работает просто отлично.:)

1 Ответ

0 голосов
/ 17 октября 2011

Существует три возможности

1) Game_Load () не вызывается до доступа к массиву.Вставьте в него точку останова и посмотрите, сработает ли она.

2) Вы как-то создаете две переменные, называемые препятствиями.Где оно определено точно?

3) Что-то снова очищает его, прежде чем вы получите к нему доступ.

Самая простая проверка - это поставить точку останова в цикле создания и проверить, что новоеработает нормально в этот момент.

...