同一个Form1窗体分别执行Show和ShowDialog后,再执行Close,为什么前者窗体对象被释放,而后者的模态窗体没有释放。也就是说如果Close以后再次执行Show,前者会产生错误,因为窗体对象已经被释放了,而后者则仍可显示窗体。哪位能解释一下为什么会有这种区别?

解决方案 »

  1.   

    ShowDialog通常都会存在返回值这种情况。所以再窗体关闭后,仍然可以访问其public变量。
      

  2.   

    show窗体被关闭之后,是释放其内存资源;
    showdialog则只是把窗体隐藏了,而不是释放其内存资源,需要我们显示释放资源。
      

  3.   

    参看
    http://blog.csdn.net/Knight94/archive/2006/04/06/652394.aspx
      

  4.   

    我也想每次关闭后手动释放,毕竟只是个“关于”窗口,没必要总放在内存中,但是经反复对比发现一个问题,对模态窗体Dispose后主窗体界面刷新瞬间有闪烁现象,而普通窗体则无闪烁。看来为了显示效果也就只好牺牲那点内存了。
      

  5.   

    haurau(鹰) 我想问问,如果我调用ShowDialog();是不是等到系统自己回收还是自己写个释放
      

  6.   

    必须使用Dispose方法当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置 DialogResult 属性的值时,.NET Framework 不调用 Close 方法。窗体转而可以隐藏并可重新显示,而不用创建该对话框的新实例。因为未关闭显示为对话框的窗体,所以在您的应用程序不再需要该窗体时,必须调用该窗体的 Dispose 方法。