Повторно открыть дочернюю форму - PullRequest
3 голосов
/ 03 января 2012

У меня есть одна основная форма и два типа дочерней формы

MainForm
ChildFormA - уникальный
ChildFormB - иметь несколько форм этого типа

Я создаю ChildFormA с:

ChildFormA form1 = new ChildFormA();
form1.MdiParent = this;
form1.Show();

Но когда я закрою его:

form1.Close();

Я не могу открыть его снова. Я уже прочитал несколько советов, которые я могу скрыть или закрыть эту форму. Но кнопка X все еще закрывает форму. Как заново открыть или как сделать так, чтобы кнопка X не закрывалась и просто ее скрыть?

Ответы [ 5 ]

9 голосов
/ 03 января 2012

Если вы хотите, чтобы ваша дочерняя форма оставалась в своем состоянии, вы должны подписаться на событие FormClosing и установить для свойства Cancel аргумента события значение true.

public ChildForm()
{
    ...
    FormClosing += new FormClosingEventHandler(ChildForm_FormClosing);
}


void ChildForm_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

Имейте в виду, что ваша форма не будет ликвидирована, если вы не добавите больше логики к этому.

В противном случае вы можете просто создать его новый экземпляр.

2 голосов
/ 03 января 2012

Вы должны создать дочернюю форму только один раз.

ChildFormA form1 = new ChildFormA();
if(form1 == null)
{
 form1.MdiParent = this;
 form1.Show();
}
else
 form1.Show();

, чем вы должны использовать решение Матиаса Коха, на дочерних формах

void FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

Также сохранить ChilFormA как Поле класса MDI , поэтому вы не потеряете Ref.к этому.

2 голосов
/ 03 января 2012

Создать новый экземпляр ChildFormA.

0 голосов
/ 03 января 2012

Вы можете использовать шаблон Singleton для этой формы.

http://csharpindepth.com/Articles/General/Singleton.aspx

Посмотрите на 4-й подход

Тогда вы получите доступ к нему, используя статический экземпляр вместо создания нового. Вам все еще нужно решение Матиаса Коха, на детских формах

void FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
    Hide();
}

Если вам нужна дополнительная помощь с шаблоном Singleton, скажите, пожалуйста.

0 голосов
/ 03 января 2012

для предотвращения закрытия формы описано здесь .Я бы также посоветовал скрыть, но, может быть, это работает, чтобы установить видимое в false ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...