WinForms对话框表单 - 关闭或处置?

mik*_*key 15 winforms

我已经继承了一些代码,想要大家运行这个修改,我关心的是内存管理.

我们假设我有一个"基础"表单,其中包含一组打开"对话框"表单的按钮.打开对话框表单的推荐模式是什么?目前我们显示"对话框"表单(在"基本"表单代码中,单击按钮时):

ChangePasswordForm frm = new ChangePasswordForm();
frm.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

然后关闭它(在"对话框"表单代码中):

private void bCancel_Click(object sender, EventArgs e)
{
  this.Close();
  //this.Dispose();  <-- this is what I am considering adding.
}
Run Code Online (Sandbox Code Playgroud)

我添加的Dispose理由是,我担心如果显示和关闭,每次一个很多次这种形式形式的实例被创建和它的资源从来没有真正释放-这是正确的?此外,如果表单右上角有"关闭"X,我是否应该在FormClosed事件中调用Dispose()?

提前致谢.

GvS*_*GvS 26

我会用一个using声明:

  using (var frm = new ChangePasswordForm()) {
      frm.ShowDialog();
  }
Run Code Online (Sandbox Code Playgroud)

将它与DialogResult结合起来:

private void bCancel_Click(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Cancel;
}
Run Code Online (Sandbox Code Playgroud)

设置DialogResult,将关闭对话框,并且呼叫者/所有者有一些反馈.

而且您不必担心关闭或处置.


Rob*_*ike 18

根据MSDN,您需要在两个条件下处置:

表单未在Close上处理时的两个条件是(1)它是多文档界面(MDI)应用程序的一部分,并且表单不可见; (2)您使用ShowDialog显示了表单.在这些情况下,您需要手动调用Dispose以标记所有表单的垃圾回收控件.

MSDN Form.Close

在using语句中声明表单将是处理此问题的适当方法.

        using (ChangePasswordForm frm = new ChangePasswordForm())
        {
            frm.ShowDialog();
        }
Run Code Online (Sandbox Code Playgroud)