哪种更好的方式来显示模态对话框?
form1 frm=new form1();
frm.showDialog()
或
(new form1()).showDialog();
答案 0 :(得分:41)
两者都不比另一方“更好”;它们完全相同!
但是,在这种特殊情况下,都错了。 ShowDialog
method要求您在表单上调用Dispose
方法。与Show
和Close
组合不同,这不是自动完成的。来自MSDN:
当表单显示为模式对话框时,单击“关闭”按钮(表单右上角带有X的按钮)会导致隐藏表单并将DialogResult属性设置为{{ 1}}。与非模态表单不同,当用户单击对话框的关闭表单按钮或设置
DialogResult.Cancel
属性的值时,.NET Framework不会调用Close
方法。而是隐藏表单,并且可以在不创建对话框的新实例的情况下再次显示该表单。由于显示为对话框的表单是隐藏的而不是关闭的,因此当您的应用程序不再需要该表单时,您必须调用表单的DialogResult
方法。
因此,您应该选择以下(等效)形式之一:
Dispose
或
using (Form1 frm = new Form1())
{
frm.ShowDialog();
}
Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();
不会自动处理表单的原因很简单,如果不是立即显而易见的话。事实证明,应用程序通常希望在表单关闭后从模式对话框的实例中读取值,例如表单控件中指定的设置。如果表单自动处理,您将无法通过访问表单对象的属性来读取这些值。因此,程序员负责处理显示为模态对话框的表单。
答案 1 :(得分:2)
一般来说,我会选择第一个,因为之后您可以访问该表单。
否则第二次开启是好的,如果你不想在它关闭后处理它。