I implemented as follows and it works (I got the solution here), but I really wonder if I can do that without having to define an array. For 20 it's a hassle but can be done, but what if you have an hundred to do? Is there a more aesthetic way to do that? public void afficheuneimagecombo()    { for (int i = 0; i <= 20; i++)       {            Item imguse = new Item();            pictureBoxs[i].Load(imguse.getImage());            pictureBoxs[i].SizeMode = PictureBoxSizeMode.StretchImage        }      }PictureBox[] pictureBoxs = new PictureBox[20];public Form1()        {            InitializeComponent();            pictureBoxs[0] = pictureBox1;            pictureBoxs[1] = pictureBox2;            pictureBoxs[2] = pictureBox3;            pictureBoxs[3] = pictureBox4;            pictureBoxs[4] = pictureBox5;              [...]            pictureBoxs[20] = pictureBox20;            afficheuneimagecombo()        }
Using a for-loop to fill 20 picturebox number 'i' with image
c#
If you want to ensure that the PictureBoxes are in the correct order in your List, then use this alternate approach such as this.  *They could be out of order if you ever copied and pasted the PictureBoxes to move them around on the form, or if you changed the names of the controls, etc...Additionally, this will find all the PictureBoxes even if they reside in more than one container:    List<PictureBox> pictureBoxes = new List<PictureBox>();    private void Form1_Load(object sender, EventArgs e)    {        Control[] matches;        for(int i = 1; i <= 100;i++)        {            matches = this.Controls.Find(pictureBox + i.ToString(), true);            if (matches.Length > 0 && matches[0] is PictureBox)            {                pictureBoxes.Add((PictureBox)matches[0]);            }        }        Console.WriteLine(pictureBoxes.Count.ToString());    }