Каков лучший способ показать модальный диалог?
form1 frm=new form1();
frm.showDialog()
или
(new form1()).showDialog();
Каков лучший способ показать модальный диалог?
form1 frm=new form1();
frm.showDialog()
или
(new form1()).showDialog();
Ни один из них не "лучше", чем другой; они абсолютно эквивалентны!
Однако в этом конкретном случае оба ошибочны. Метод ShowDialog
требует вызова метода Dispose
в форме. В отличие от комбинаций Show
и Close
это делается не автоматически. Из MSDN:
Когда форма отображается как модальное диалоговое окно, нажатие кнопки "Закрыть" (кнопка с X в верхнем правом углу формы) заставляет форму скрываться, а свойство DialogResult - на
DialogResult.Cancel
. В отличие от немодальных форм методClose
не вызывается .NET Framework, когда пользователь нажимает кнопку закрытия формы диалогового окна или задает значение свойстваDialogResult
. Вместо этого форма скрыта и может быть показана снова без создания нового экземпляра диалогового окна. Поскольку форма, отображаемая как диалоговое окно, скрыта, а не закрыта, вы должны вызвать методDispose
формы, когда форма больше не нужна вашему приложению.
Таким образом, вы должны выбрать одну из этих (эквивалентных) форм:
using (Form1 frm = new Form1())
{
frm.ShowDialog();
}
или
Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();
Причина, по которой ShowDialog
не удаляет автоматически форму, достаточно проста, если не сразу очевидна. Оказывается, что приложения часто хотят считывать значения из экземпляра модальной формы диалога после закрытия формы, например настроек, заданных в элементах формы. Если форма была автоматически удалена, вы не сможете прочитать эти значения, обратившись к свойствам объекта формы. Таким образом, программист отвечает за удаление форм, показанных в виде модальных диалогов, когда он завершен с ними.
В общем, я бы пошел первым, потому что после этого вы можете получить доступ к форме.
В противном случае 2-й вариант в порядке, если вы не хотите иметь дело с ним после его закрытия.