Подтвердить что ты не робот

Какой способ лучше назвать Form.ShowDialog()?

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

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

или

(new form1()).showDialog();
4b9b3361

Ответ 1

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

Однако в этом конкретном случае оба ошибочны. Метод 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

В общем, я бы пошел первым, потому что после этого вы можете получить доступ к форме.

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