2013-10-16 36 views
2

它与模态形式明确实例...如果处置非模态形式

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
    Dim f As New myForm 
    f.ShowDialog(Me) 
    f.Dispose 
End Sub 

但与非模态形式怎么办?
何处置?

Dim f As New myForm 
    f.Show(Me) 
    f.Dispose 

这将立即关闭新创建的窗体,因此f.Dispose不应该留在这里。
如果我把它放在_FormClosing处理程序中会很好,但还不够,因为我们可以少运行该表单的实例。

1)那么,在第二个例子中打开非模态窗体的位置和方式如何?
2)是否有任何事件知道我们的孩子表格关闭?

+0

1)首先,当代码退出单击事件时,f的每个实例都将超出范围,.NET将在其解决时将其清除。第二种情况MIGHt是相同的,取决于代码的存在位置2)参见Form_closed,form_closing事件。 – Plutonix

+0

嗨Plutonix,在Form_Closing我们不能捕捉儿童窗体关闭的事件,只有当我关闭!我知道,我可以从小孩那里提出这个事件,但我问是否有自动方式。 –

回答

2

你并不需要调用Dispose模式窗体上,因为形式的资源清理自动,除了以下两个条件:

  1. 它是一个多文档界面的一部分(MDI)应用程序和形式是不可见的
  2. 您已经显示使用ShowDialog

您的情况不属于上述任何两个条件,所以你不必担心其中形式拨打电话.Dispose(),因为它不是必需的。

阅读Form.Close Method文档以获取更多信息。

+0

谢谢卡尔,听起来合乎逻辑。 –