WinForms 对话框窗体——关闭还是处置?

标签 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 的理由是我担心如果每次创建表单的新实例并且它的资源从未真正释放时多次显示和关闭此表单 - 这是正确的吗?另外,如果表单在右上角有“关闭”X,我是否也应该在 FormClosed 事件中放置一个 Dispose() 调用?

提前致谢。

最佳答案

我会使用 using陈述:

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

将其与 DialogResult 结合使用:
private void bCancel_Click(object sender, EventArgs e)
{
   this.DialogResult = DialogResult.Cancel;
}

设置DialogResult,会关闭Dialog,调用者/所有者有一些反馈。

而且您不必担心 Close 或 Dispose。

关于WinForms 对话框窗体——关闭还是处置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081822/

相关文章:

c# - 我怎样才能制作一个 pictureBox,当点击它时,它会在标签上显示一些文本?

c# - 如何使用 LINQ 从数据库设置自动完成功能?

c# - 添加/删除项目资源时 Visual Studio 2015 挂起

.net - 更改数百个WinForms控件的位置的性能

c# - .NET 隐藏标题栏但保留边框

c# - 在托盘栏中打开多个图标

wpf - 使用 WebBrowser 控件时 IE 11 WebGL 性能变慢

c# - WinForms - 如何从 WebBrowser 控件内部执行 C# 应用程序代码?

c# - 如何将水平滚动位置设置为指定值?

c# - 如何确定给定字体的最大高度(以像素为单位)?