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