VB中的窗体为何无法用 set form1=nothing的方法从内存释放呢?Private Sub Command1_Click()
    Unload Form1
    Set Form1 = Nothing
    
    If Form1 Is Nothing Then
        MsgBox "已经释放"
    Else
        MsgBox "没有释放"       '实际上,运行多少次也是没有释放
    End If
    
End Sub好象可以unload,然后窗体不见了,但是总在内存中,为何set form1=nothing 总是不起作用呢?

解决方案 »

  1.   

    if form1 is nothing这个判断语句会导致form1不为空。单步执行就可以看到set form1 is nothing之后form1的value是nothing,而判断语句导致不是空。
      

  2.   

    set form1=nothing起作用了,只是后来又load出来了
      

  3.   

    If Form1 Is Nothing Then 这一句又把Form1载入了
      

  4.   


    '如果直接用 from1.show 或 from1.load 会是全局且退不出的, 如果是主窗口或者等到end才unload的可以这样用。
    '而且,show完再show,load事件里的相同代码可能会有不同的怪效果(做数据库时遇到过)
    '要指定一个新的窗口变量,不要直接用类名from1
    'dim frm as form1 ’定义为模块级变量Private Sub Command1_Click() 
        dim frm as form1 '定义为过程变量    set frm = new form1 '激活load事件, 一般用这种方法, 因为有些时候判断要不要new一个
        'frm.show 1 'show it
        Unload frm
        '这里还可以访问frm的非窗口的公共变量
        '比如:x = frm.publicVar '内存还没有回收 
        Set frm = Nothing '内存被回收了,不要再访问了
        
        If frm Is Nothing Then 
            MsgBox "已经释放,退出此sub后,内存中已经没有了" 
        Else 
            MsgBox "没有释放,不会吧"      
        End If 
    End Sub 
      

  5.   

    加一个断点,然后按F8执行,在watch窗口就能看到。