Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

272
Vistas
How to let pictureboxes not overlap with each other?

So I made a game for a school project in windows forms. Only problem is, is that my pictures are overlapping with each other. So my question how do I get them all on a different location where they don't touch each other or not overlap?

In this Method I create the zombies and here I just choose for random locations between -100 and 0 on the x-as

public void ZombieMaker(int aantal, Form formInstance, string ZombieDik)
{
    for (int i = 0; i < aantal; i++)
    {
            PictureBox picture = new PictureBox();

            picture.Image = Properties.Resources.ZombieDik;
            picture.Size = new Size(200, 200);
            picture.Location = new Point(random.Next(1500), random.Next(-100,0));
            picture.SizeMode = PictureBoxSizeMode.Zoom;
            picture.Click += zombie_Click;
            picture.BackColor = Color.Transparent;
            formInstance.Controls.Add(picture);
            picture.Tag = zombies[i];
    }
}

pic of zombies overlapping

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Keep track of the already placed pictureboxes, and validate if the bound would overlap.

//List of all pictureBoxes
private List<PictureBox> _pictureBoxes = new List<PictureBox>();

public void ZombieMaker(int aantal, Form formInstance, string ZombieDik)
{
    for (int i = 0; i < aantal; i++)
    {
        Rectangle newPosition;

        //loop till you found a new position
        while (true)
        {
            var newPoint = new Point(random.Next(1500), random.Next(-100,0));
            var newSize = new Size(200, 200);

            newPosition = new Rectangle(newPoint, newSize);

            //validate the newPosition
            if (!_pictureBoxes.Any(x => x.Bounds.IntersectsWith(newPosition)))
            {
                //break the loop when there isn't an overlapping rectangle found
                break;
            }
        }

        PictureBox picture = new PictureBox();
        _pictureBoxes.Add(picture);
 
        picture.Image = Properties.Resources.ZombieDik;
        picture.Size = newPosition.Size;
        picture.Location = newPosition.Location;
        ...
      
    }
}

To validate the overlapping I am using the IntersectWith method of the Rectangle class

https://docs.microsoft.com/en-us/dotnet/api/system.drawing.rectangle.intersectswith?view=net-6.0#system-drawing-rectangle-intersectswith(system-drawing-rectangle)

Edit:

Here a do/while loop instead of the while loop.

Rectangle newPosition;

do
{
    var newPoint = new Point(random.Next(1500), random.Next(-100,0));
    var newSize = new Size(200, 200);

    newPosition = new Rectangle(newPoint, newSize);
} while(_pictureBoxes.Any(x => x.Bounds.IntersectsWith(newPosition))
over 4 years ago · Santiago Trujillo Denunciar

0

I fixed your code so the picture boxes do not overlap each other:

public void ZombieMaker(int aantal, Form formInstance, string ZombieDik)
{
   for (int i = 0; i < aantal; i++)
   {
        PictureBox picture = new PictureBox();

        picture.Image = Properties.Resources.ZombieDik;
        picture.Size = new Size(200, 200);
        picture.Location = new Point(picture.Width * i, random.Next(-100,0));
        picture.SizeMode = PictureBoxSizeMode.Zoom;
        picture.Click += zombie_Click;
        picture.BackColor = Color.Transparent;
        formInstance.Controls.Add(picture);
        picture.Tag = zombies[i];
  }
}
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda