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