VB.NET创建对象和销毁对象的问题

来源:百度文库 编辑:神马文学网 时间:2024/04/27 23:45:41
VB.NET code

Dim formt As formCurrentUserState = New formCurrentUserState() 'formCurrentUserState一个俺自己写好的窗体
formt.MdiParent = Me
formt.Show()

俺自己定义了一个窗体, 并且在FRMMAIN中(mdiparent窗口), 单击按钮就调用上面的代码。
能运行通过, 不过, 俺想改进一下
1通过另外一个按钮, 来销毁这个formt。不知道要怎样做呢
2.通过一个全局的标志位, 记录下当前是否存在了这个FORMT。
然后:
在那个按钮中
if flag = false then
创建之
else
销毁之
end if
这样要怎样写的代码呢?
对象在释放后系统自动回收内存的。
可以使用:
formt.Dispose()
GC.Collect()
不用全局标志就可以实现,见下:

但有两点要注意:
一、你的 formt 对象必须为全局变量(即:必须在模块中先用 Dim formt As formCurrentUserState 先声明formt 变量),然后在自己窗体的FormLoad事件中赋值: formt=me 。只有这样你的销毁按钮才会有效。
二、销毁时用这个:
If formt IsNot Nothing Then
  formt.Dispose()
End If

public function FindForm(sFormName) as form
dim i as integer
dim bFind as boolean

bfind=false
for i=0 to frmmain.mdichildren.length-1
    if frmmain.mdichildren(i).name="sFormName" then
        bfind=true
        exit for
    end if
next
if bfind then
return frmmain.mdichildren(i)
else
return nothing
end if

end function
Dim formt As formCurrentUserState = New formCurrentUserState()  'formCurrentUserState一个俺自己写好的窗体
formt.Name="yourname";//起一个名字,用来标识
        formt.MdiParent = Me
        formt.Show()

要显示的时候,首先检查窗体是否已经存在:
Application.OpenForms("yourname") <>nothing
然后才生成并显示窗体

销毁也是一样,首先检查是否存在,如果存在,调用Close方法。
全局变量里申明
Dim formt As formCurrentUserState
想创建的话在事件里写
If formt  Is Nothing Or formt .IsDisposed = True Then
  formt  = New formCurrentUserState()
End If
想销毁的话在事件里写
formt.Dispose()
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    For Each objForm As Form In Me.MdiChildren
      If objForm.GetType.Name.ToLower = "youformname" Then
        objForm.Close()
        objForm.Dispose()
      End If
    Next
  End Sub