C # Получение картинок из Struct - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу получить объект, созданный в структуре. Хотя показ кодов объяснит это лучше.

 private void Obstacle() 
    {

        obstacle_pos_x = obstacle_random_x.Next(1000);
        obstacle_pos_y = obstacle_random_y.Next(700);
        picture = new PictureBox 
        {
            Name = "pictureBox" + obstacle_numb,
            Size = new Size(32, 32),
            Location = new Point(obstacle_pos_x,obstacle_pos_y),               
            BackColor = Color.Black,
        };
        this.Controls.Add(picture);       
    }

Это структура внутри метода препятствий. Как вы можете видеть, этот метод создает картинки, и я хочу перетащить их в KeyPressEvents. Например, если я нажму W, все рисунки, созданные с помощью struct, должны переместиться на -10 (ось Y).

else if (e.KeyCode == Keys.W)
        {
            y -= chrspeed;
            obstacle_numb++;
            Obstacle();
            for (int i = 0; i <= obstacle_numb; i++)
            {

            }
        }

Ну, это событие. Но это просто создает картинные коробки. Цикл пуст, потому что я не мог понять, что делать. Я просто хочу сделать что-то подобное,

картинка + номер препятствия . Расположение = новая точка (x, y); (Мне нужна комбинация «картинка + препятствие_numb».)

Но также знайте, что это невозможно. Мне пришло в голову foreach, но я не знаю, как его использовать. Может быть, что-то подобное может работать, если исправлено.

foreach(PictureBox objects from picture) //It doesn't work too.

Я застрял прямо сейчас и жду вашей помощи. Заранее спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Проще всего было бы перебрать все дочерние элементы управления типа PictureBox:

...
foreach (var pict in this.Controls.OfType<PictureBox>())
{
    // pict is now a Picturebox, you can access all its properties as you have constructed it
    // the name was constructed that way: Name = "pictureBox" + obstacle_numb,
    if (pict.Name != "pictureBox1")
    {
        pict.Location = new Point(pict.X, pict.Y-10);
    }
}
...