Какой лучший способ вызвать Form.ShowDialog ()? - PullRequest
12 голосов
/ 24 декабря 2011

Какой лучший способ показать модальное диалоговое окно?

form1 frm=new form1();
frm.showDialog()

или

(new form1()).showDialog();

Ответы [ 2 ]

41 голосов
/ 24 декабря 2011

Ни один не "лучше", чем другой; они совершенно эквивалентны!

Однако в данном конкретном случае оба неверны . Метод ShowDialog требует, чтобы вы вызвали метод Dispose в форме. В отличие от комбинации Show и Close, это не выполняется автоматически. Из MSDN:

Когда форма отображается в виде модального диалогового окна, нажатие кнопки «Закрыть» (кнопка с крестиком в правом верхнем углу формы) приводит к тому, что форма скрывается, а свойство DialogResult устанавливается на * 1014. *. В отличие от немодальных форм, метод Close не вызывается .NET Framework, когда пользователь нажимает кнопку закрытия формы диалогового окна или задает значение свойства DialogResult. Вместо этого форма скрыта и может быть показана снова без создания нового экземпляра диалогового окна. Поскольку форма, отображаемая в виде диалогового окна, скрыта, а не закрыта, необходимо вызвать метод Dispose формы, когда форма больше не нужна вашему приложению.

Таким образом, вам следует выбрать одну из следующих (эквивалентных) форм:

using (Form1 frm = new Form1())
{
    frm.ShowDialog();
}

или

Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();

Причина, по которой ShowDialog не удаляет автоматически форму, достаточно проста, если не сразу очевидна. Оказывается, что приложениям часто требуется считывать значения из экземпляра модальной диалоговой формы после того, как форма была закрыта, например настройки, указанные в элементах управления формы. Если форма будет автоматически удалена, вы не сможете прочитать эти значения, открыв свойства объекта формы. Таким образом, программист отвечает за удаление форм, отображаемых в виде модальных диалоговых окон, когда с ними заканчиваются.

2 голосов
/ 24 декабря 2011

Как правило, я бы пошел на первый 1, потому что вы можете получить доступ к форме позже.

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

...