Попробуйте этот комбо
Первый замыкающий контакт формируют глобальный объект
private ContactForm contactForm;
Затем обработчик контактной кнопки:
private void contactButton_Click(object sender, EventArgs e)
{
if (contactForm == null)
{
contactForm = new ContactForm();
contactForm.FormClosing += new FormClosingEventHandler(contactForm_FormClosing);
}
contactForm.Show();
}
Затем обработайте событие FormClosing в ContactForm, чтобы скрыть его, а не близко это:
private void contactForm_FormClosing(object sender, FormClosingEventArgs e)
{
contactForm.Hide();
e.Cancel = true;
}
Или, если вы хотите контактную форму, чтобы закрыть, и открыт как новый следующий раз, ручки FormClosed вместо:
private void contactForm_FormClosed(object sender, FormClosedEventArgs e)
{
contactForm = null;
}
Затем в следующий раз, когда нажимается кнопка, предложение null if будет поймано, и форма будет установлена в новый экземпляр и будет открыта.
Сделайте возвращаемое значение вашего статического метода 'T'. В этом случае вам не нужен листинг в вашем использовании: 'ContactForm form = GetOpenedForm();' –
Oliver
Используя LINQ, вы можете сделать один лайнер из вашего вспомогательного метода: 'return Application.OpenForms.OfType .FirstOrDefault () ' –
Oliver
Это не работает, если форма минимизирована, поэтому вы можете добавить WindowState Normal. См. Мой ответ ниже –