WinForms对话框窗体--关闭还是释放?

WinForms对话框窗体--关闭还是释放?,winforms,Winforms,我继承了一些代码,希望大家都能运行这个修改,我关心的是内存管理 让我们假设我有一个“基本”表单,它有一堆打开“对话框”表单的按钮。打开对话框窗体的推荐模式是什么?目前,我们显示“对话框”表单,如下所示(在“基本”表单代码中,单击按钮): 然后像这样关闭它(在“对话框”表单代码中): private void b取消单击(对象发送方,事件参数e) { 这个。关闭(); //this.Dispose();我将使用语句: using (var frm = new ChangePasswordFor

我继承了一些代码,希望大家都能运行这个修改,我关心的是内存管理

让我们假设我有一个“基本”表单,它有一堆打开“对话框”表单的按钮。打开对话框窗体的推荐模式是什么?目前,我们显示“对话框”表单,如下所示(在“基本”表单代码中,单击按钮):

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

private void b取消单击(对象发送方,事件参数e)
{
这个。关闭();

//this.Dispose();我将使用
语句:

  using (var frm = new ChangePasswordForm()) {
      frm.ShowDialog();
  }
将其与对话框结果相结合:

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

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


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

根据MSDN,您需要在两种情况下处置:

关闭时未释放表单的两种情况是:(1)它是多文档界面(MDI)应用程序的一部分,并且该表单不可见;(2)您已使用ShowDialog显示该表单。在这些情况下,您需要手动调用Dispose以将该表单的所有控件标记为垃圾回收

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

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

谢谢,是设置的DialogResult发送使用块“超出范围”吗?设置DialogResult将关闭对话框,ShowDialog调用将返回。ShowDialog以“模式”显示窗体模式下,调用代码将被阻止,直到对话框关闭。可能与主题无关,但如果您在使用
Show
而不是
ShowDialog
打开的窗体中设置
DialogResult
,窗体是否仍将关闭?@shoosha设置DialogResult将导致用于模式窗体的特殊消息循环停止运行,此messageloop不用于非模式窗体。在非模式窗体上设置DialogResult将不会关闭窗体。我读了这篇文章,发现它很有趣。希望能对您有所帮助。
private void bCancel_Click(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Cancel;
}
        using (ChangePasswordForm frm = new ChangePasswordForm())
        {
            frm.ShowDialog();
        }