这是调用Form.ShowDialog()的更好方法

本文关键字:更好 方法 ShowDialog 调用 Form | 更新日期: 2023-09-27 18:18:40

显示模态对话框的更好方法是什么?

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

(new form1()).showDialog();

这是调用Form.ShowDialog()的更好方法

两者都不比另一个"好";它们是完全相等的!

然而,在这个特殊的例子中,都是错误的ShowDialog方法需要在表单上调用Dispose方法。与ShowClose的组合不同,这不是自动完成的。从MSDN:

当窗体显示为模态对话框时,单击Close按钮(窗体右上角带有X的按钮)会导致窗体被隐藏,并且将dialgresult属性设置为DialogResult.Cancel。与非模态表单不同,当用户单击对话框的关闭表单按钮或设置DialogResult属性的值时,Close方法不会被。net框架调用。相反,表单是隐藏的,可以再次显示,而无需创建对话框的新实例。因为显示为对话框的窗体是隐藏的而不是关闭的,所以当应用程序不再需要窗体时,必须调用窗体的Dispose方法。

因此,您应该在以下(等价的)形式之间进行选择:
using (Form1 frm = new Form1())
{
    frm.ShowDialog();
}

Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();

ShowDialog没有自动处理表单的原因很简单,如果不是很明显的话。事实证明,应用程序通常希望在窗体关闭后从模态对话框窗体的实例中读取值,例如窗体控件中指定的设置。如果自动处理表单,则无法通过访问表单对象的属性来读取这些值。因此,当程序员使用完模态对话框时,他负责处理显示为模态对话框的表单。

通常我会选择第一个1,因为您可以稍后访问表单。