Самый простой способ сделать это - отслеживать динамически созданные элементы управления в приватном поле.
private Label _myLabel;
_myLabel = new Label();
myLabel.Text = "Hello World!";
tableLayoutPanel1.Controls.Add(myLabel);
// ... later in the button click handler ... //
myLabel.Text = "Goodbye Cruel World!";
Помните, что Windows Forms - это среда с состоянием, в отличие от ASP.NET, поэтому поля не теряют своих значений при взаимодействии пользователя с формой.
ETA:
Label dynamic_label = new Label();
for(in i =0;i<6;i++){this.Controls.Add(dynamic_label);}
Этот код из вашего комментария добавляет ЖЕ метку 5 раз. Я не думаю, что это твое намерение. Когда вы устанавливаете свойство Text, все они будут иметь одинаковый текст, потому что они ссылаются на один и тот же элемент управления. Вы можете использовать мое решение и объявить
Label myLabel1, myLabel2, ..., myLabel5;
Если у вас так много, что вы объявляете их в цикле, я бы сохранил их в Dictionary<string, Label>
, чтобы вам не приходилось искать в массиве, чтобы найти правильный.