【发布时间】:2009-12-08 07:01:43
【问题描述】:
我需要您的帮助来澄清表单是否完全像对象一样工作?
如果我从另一个对象 obj1 创建一个对象 obj2。 obj2 将在 obj1 dispose 上进行处理。
但表单并非如此。 查看下面给出的案例和伪代码。
我有三种形式;表格 1、表格 2 和表格 2。
form1 是启动表单。 form1 将创建 &s form2 和 from2 如何使用每个表单中的按钮创建和显示 form3。
如果我关闭form2,在打开所有3个表格后,我可以在form1和form3中工作。
我的问题是即使 form3 是从 form2 创建的,为什么它没有在 form2 close 上处理?
Form1
Public Class Form1
Private Sub cmdOpenForm2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpenForm2.Click
Dim frm As New Form2
With frm
''/.MdiParent = frmMain
.Show()
.BringToFront()
End With
End Sub
Private Sub Form1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
''//frmMain.tsStatus.Text = "Form1 disposed"
End Sub
End Class
Form2
Public Class Form2
Private Sub cmdRandomColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRandomColor.Click
Randomize()
Label1.ForeColor = Color.FromArgb(Rnd() * 255, Rnd() * 255, Rnd() * 255, Rnd() * 255)
End Sub
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
frmMain.tsStatus.Text = "Form2 disposed"
End Sub
Private Sub cmdOpenForm3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpenForm3.Click
Dim frm As New Form3
With frm
''//.MdiParent = frmMain
.Show()
.BringToFront()
End With
End Sub
End Class
Form3
Public Class Form3
Private Sub cmdRandomColor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdRandomColor.Click
Randomize()
Label1.ForeColor = Color.FromArgb(Rnd() * 255, Rnd() * 255, Rnd() * 255, Rnd() * 255)
End Sub
Private Sub Form3_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
frmMain.tsStatus.Text = "Form3 disposed"
End Sub
End Class
任何帮助将不胜感激。
编辑 谢谢大家的解决方案
抱歉,我不是在寻找如何在 form2 关闭时处理 form3 的解决方案。
我的兴趣是背后发生的事情......从2创建的form3实例是否有可能获得GC收集并且我得到内存错误。
因为我在实际应用程序中遇到保护内存访问异常,该应用程序设计不正确,并且现在太大而无法重构。
我的问题是 form3 实例在哪里创建?它是在 Form2 实例中还是在其他地方。 因为我可以在 form2 处理后访问 form3 实例。我怀疑它是在其他地方创建的
【问题讨论】:
标签: winforms