Sta*_*low 12 .net c# showdialog winforms
哪个是显示模态对话框的更好方法?
form1 frm=new form1();
frm.showDialog()
Run Code Online (Sandbox Code Playgroud)
要么
(new form1()).showDialog();
Run Code Online (Sandbox Code Playgroud)
Cod*_*ray 41
两者都不比另一个"更好"; 它们完全相同!
但是,在这种特殊情况下,两者都是错误的.该ShowDialog方法要求您Dispose在窗体上调用该方法.不像Show和Close组合,这不是自动完成的.来自MSDN:
当窗体显示为模式对话框时,单击"关闭"按钮(窗体右上角带有X的按钮)会导致隐藏窗体并将DialogResult属性设置为
DialogResult.Cancel.与非模态表单不同,Close当用户单击对话框的关闭表单按钮或设置DialogResult属性的值时,.NET Framework不会调用该方法.而是隐藏表单,并且可以在不创建对话框的新实例的情况下再次显示该表单.因为显示为对话框的表单是隐藏的而不是关闭的,Dispose所以当应用程序不再需要表单时,必须调用表单的方法.
因此,您应该选择以下(等效)形式之一:
using (Form1 frm = new Form1())
{
frm.ShowDialog();
}
Run Code Online (Sandbox Code Playgroud)
要么
Form1 frm = new Form1();
frm.ShowDialog();
frm.Dispose();
Run Code Online (Sandbox Code Playgroud)
ShowDialog不自动处理表单的原因很简单,如果不是立即显而易见的话.事实证明,应用程序通常希望在窗体关闭后从模式对话框窗体的实例读取值,例如窗体控件中指定的设置.如果表单自动处理,您将无法通过访问表单对象的属性来读取这些值.因此,程序员负责处理显示为模态对话框的表单.
| 归档时间: |
|
| 查看次数: |
20601 次 |
| 最近记录: |