俺自己定义了一个窗体, 并且在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 |
|