MilanP
MilanP

Reputation: 3

controlling a spawned picturebox

I am trying to make a little game coded in c#, the game involves moving enemies. These enemies are spawned in using the following code, this code is used multiple times to spawn multiple enemies.

    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);
  }

The problem is that when trying to make them move or collide, Visual Studio can't find the name and gives an error. This is the code i used for collision:

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

How can I call the spawned picturebox in the code without getting an error?

Upvotes: 0

Views: 457

Answers (1)

CodeCaster
CodeCaster

Reputation: 151594

WinForms controls have names, but that doesn't mean you can access them using that name as a C# identifier.

Your PictureBox only has a named reference within EventHandler(), namely picture, but once control leaves that method that reference goes out of scope.

You need to find the controls again, or find another way to reference the generated controls.

So either:

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

Or put this on your form:

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

And then in the EventHandler();

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

After which you can use this for your collision detection:

foreach (var pictureBox in pictureBoxList)
{
    // ...
}

Upvotes: 1

Related Questions