Я пытаюсь сделать небольшую игру, написанную на C #, игра включает в себя перемещение врагов. Эти враги создаются с помощью следующего кода, этот код используется несколько раз для создания нескольких врагов.

    private void EventHandler(Action<object, EventArgs> spawnBox)
    {
        Random randomPlek = new Random();

            int xPlek;
            xPlek = randomPlek.Next(1000, 1100);

            int yPlek;
            yPlek = (randomPlek.Next(0, 8)) * 100;

            var picture = new PictureBox
            {

                Name = "pictureBoxLM",
                Size = new Size(150, 100),
                SizeMode = PictureBoxSizeMode.StretchImage,
                BackColor = Color.Transparent,
                Location = new Point(xPlek, yPlek),
                Image = Leeuwenmier,

            };
            this.Controls.Add(picture);
  }

Проблема в том, что при попытке заставить их двигаться или сталкиваться, Visual Studio не может найти имя и выдает ошибку. Это код, который я использовал для столкновения:

if(PbMier.Bounds.IntersectsWith(pictureBoxLM.Bounds))
            {
            // some actions
            }

Как я могу вызвать созданное окно с картинками в коде, не получив сообщения об ошибке?

0
MilanP 18 Июн 2018 в 13:45

1 ответ

Лучший ответ

У элементов управления WinForms есть имена, но это не значит, что вы можете получить к ним доступ, используя это имя в качестве идентификатора C #.

Ваш PictureBox имеет только именованную ссылку в EventHandler(), а именно picture, но как только элемент управления покидает этот метод, эта ссылка выходит за пределы области видимости.

Вам нужно снова найти элементы управления или найти другой способ ссылки на созданные элементы управления.

Так что либо:

var allPictureBoxes = this.Controls.Find("PictureBoxLM");
foreach (var pictureBox in allPictureBoxes)
{
    // ...
}

Или укажите это в своей форме:

List<PictureBox> pictureBoxList = new List<PictureBox>();

А затем в EventHandler();

this.Controls.Add(picture);
pictureBoxList.Add(picture);

После чего вы можете использовать это для обнаружения столкновений:

foreach (var pictureBox in pictureBoxList)
{
    // ...
}
1
CodeCaster 18 Июн 2018 в 10:58