W pętli
for (int i = 0; i < tableLayoutPanel1.Controls.Count; i++)
są "pobierane" kolejne obiekty (kontrolki), które "znajdują się" w tableLayoutPanel1 i gdy kontrolka jest typu Label
if (tableLayoutPanel1.Controls[i] is Label)
jest przypisywana do
Label label;
...
label = (Label)tableLayoutPanel1.Controls[i];
więc musisz "używać" w zapisie też label
label.Text = icons[randomNumber];
w Twoim kodzie odwołujesz się "ciągle do" label1
label1.Text = icons[randomNumber];
sprawdź np. taki zapis
private void AssignIconsToSquares()
{
// wykonujemy tzw. random shuffle na liście
// https://stackoverflow.com/questions/12137127/how-to-shuffle-a-list
icons = icons.OrderBy(x => random.Next()).ToList();
label1.Text = icons[0];
label2.Text = icons[1];
label3.Text = icons[2];
// ...
label6.Text = icons[5];
// ...
label9.Text = icons[8];
// ...
label12.Text = icons[11];
// ...
label16.Text = icons[15];
}
lub
private void AssignIconsToSquares()
{
icons = icons.OrderBy(x => random.Next()).ToList();
int index = 0;
for (int i=0; i<tableLayoutPanel1.Controls.Count; i++)
{
if (tableLayoutPanel1.Controls[i] is Label)
{
Label label = (Label)tableLayoutPanel1.Controls[i];
label.Text = icons[index++];
}
}
}
jeżeli jesteśmy pewni, że tableLayoutPanel1 tylko zawiera Label-ki
private void AssignIconsToSquares()
{
icons = icons.OrderBy(x => random.Next()).ToList();
for (int i=0; i<tableLayoutPanel1.Controls.Count; i++)
{
Label label = (Label)tableLayoutPanel1.Controls[i];
label.Text = icons[i];
}
}