控制衍生的图片框

时间:2018-06-18 10:45:59

标签: c# winforms

我正在尝试用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
            }

如何在代码中调用衍生的图片框而不会出错?

1 个答案:

答案 0 :(得分: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)
{
    // ...
}