У вас, без сомнения, есть ошибка в вашем коде, вы создаете новый экземпляр формы вместо того, чтобы снова вызывать Show () для скрытого объекта формы. Это плохая ошибка, она заставит вашу программу потреблять много машинных ресурсов, в конечном итоге она вылетит, когда Windows не разрешит вашему процессу создавать больше окон.
Чтобы ваша схема работала, вы должны написать код, который различает закрытую форму и скрытую. Лучший способ сделать это - явно отслеживать его время жизни с помощью события FormClosed. Как это:
private Form2 form2Instance;
private void button1_Click(object sender, EventArgs e) {
if (form2Instance == null) {
// Doesn't exist yet, so create and show it
form2Instance = new Form2();
form2Instance.FormClosed += delegate { form2Instance = null; };
form2Instance.Show();
}
else {
// Already exists, unhide, restore and activate it
form2Instance.WindowState = FormWindowState.Normal;
form2Instance.Visible = true;
form2Instance.BringToFront();
}
}