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

时间:2011-11-10 15:19:13

标签: winforms

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

让我们说我有一个“基础”表格,其中有一串打开“对话框”表格的按钮。打开对话框表单的推荐模式是什么?目前我们显示“对话框”表单(在“基本”表单代码中,单击按钮时):

ChangePasswordForm frm = new ChangePasswordForm();
frm.ShowDialog();

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

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

我添加Dispose的理由是,我担心如果每次创建表单的 new 实例并且其资源从未真正发布时,此表单会多次显示和关闭 - 是这个对吗?另外,如果表单右上角有“close”X,我是否应该在FormClosed事件中调用Dispose()?

提前致谢。

2 个答案:

答案 0 :(得分:26)

我会使用using声明:

  using (var frm = new ChangePasswordForm()) {
      frm.ShowDialog();
  }

将它与DialogResult结合使用:

private void bCancel_Click(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Cancel;
}

设置DialogResult,将关闭对话框,并且来电者/所有者有一些反馈。

您不必担心关闭或处置。

答案 1 :(得分:18)

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

  

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

MSDN Form.Close

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

        using (ChangePasswordForm frm = new ChangePasswordForm())
        {
            frm.ShowDialog();
        }