Переменная Rainbow является локальной для обработчика событий btnShop_Click , и вы не можете использовать эту переменную в другом методе, даже если вы используете то же имя. Подробнее об этом можно узнать здесь
Вам необходимо переместить элементы управления в глобальную область или дать им имя и извлечь их из коллекции элементов управления формы.
Например, переместите переменную, получающую динамическую форму, в глобальную область (вне любого метода класса, но внутри объявления класса)
private Form frmShop = null;
private void btnShop_Click(object sender, EventArgs e)
{
frmShow = new Form();
.....
// Set the Name property for the label
Label Rainbow = new Label { Name = "Rainbow" }
...
frmShow.Controls.Add(Rainbow);
}
protected void newButton_Click(object sender, EventArgs e)
{
...
// Try to extract the label required from the form controls collection
// using the specified name
Label aRainbowLabel = frmShow.Controls
.OfType<Label>()
.FirstOrDefault(x=>x.Name=="Rainbow");
aRainbowLabel.Text = "Rainbows: 1";
}
Остерегайтесь, что вы идете по опасному пути здесь. Переменная frmShow является глобальной, и если вы снова нажмете ту же кнопку, вы создадите вторую форму с теми же элементами. Если с этим все в порядке, то нет проблем, но если вам нужна только одна форма такого типа, вам нужно проверить переменную на null перед созданием формы и установить для переменной frmShow значение null, если вы закроете эту форму.