用 load 方法加载的控件,在窗体关闭时,如何释放呢?(有可能不全load)我动态加载控件,但是不一定一定加载,所以关闭窗体时不好判断是不是已经加载了,
所以不知如何释放资源。
Option ExplicitPrivate Sub cmdadd_Click()
    Dim i As Integer
    Dim cmdw As Integer
    cmdw = cmd1(0).Width
    cmd1(0).Visible = True
    For i = 1 To 10
        Load cmd1(i)
        cmd1(i).Top = cmd1(i - 1).Top
        cmd1(i).Left = cmd1(i - 1).Left + cmdw + 10
        cmd1(i).Visible = True
    Next
End SubPrivate Sub Form_Unload(Cancel As Integer)

'''下列代码有错误:    

    Dim i As Integer
'    For i = 1 To 10
'        Debug.Print i
'        If cmd1(i) Is Nothing Then
'            Debug.Print "unload"
'            Unload cmd1(i)
'        Else
'            Debug.Print "no unload"
'        End If
'    NextEnd Sub

解决方案 »

  1.   

    Private Sub cmdadd_Click()
        Dim i As Integer
        Dim cmdw As Integer
        cmdw = cmd1(0).Width
        cmd1(0).Visible = True
        For i = 1 To 10
            Load cmd1(i)
            cmd1(i).Tag = 3
            cmd1(i).Top = cmd1(i - 1).Top
            cmd1(i).Left = cmd1(i - 1).Left + cmdw + 10
            cmd1(i).Visible = True
        Next
    End SubPrivate Sub Command1_Click()'为了让你能看按钮是怎样删除的没放在窗体的卸载事件里
    Dim i As Integer
        Dim OBJ As Object
      For Each OBJ In Me.Controls
    If TypeOf OBJ Is VB.CommandButton And OBJ.Tag = 3 Then
    Unload OBJ
        End If
       Next
    End Sub
      

  2.   

    窗体关闭时,加载在窗体上的控件所占内存资源将全部自动释放。除非你不关闭窗体,才要去考虑unload问题。
      

  3.   

    确认吗?
    为何以前看到好多贴子,讨论关闭程序时,依次释放窗体呢?
    是不是mdi父窗体的程序,在程序结束时,不会自动释放mdi子窗体呢?
    1.窗体中的控件真的会自动释放资源吗?
    2.mdi父关闭时,其子窗体会自动释放吗?
      

  4.   

    1)除非控件占有的外部资源(比如打开的文件、特殊的句柄、消息挂钩等)不能自动释放,否则创建会自动随着创建卸载而自动释放。
    2)在与1相同的前提下,MDI父窗体关闭时自动关闭子窗体。
    3)MDI父窗体和非子窗体必须显式卸载、或通过用户操作关闭而且不被阻止。你所谓的“程序结束”需要一个明确的定义。
    看不到界面不等于进程结束;即使进程强制终止也不表示资源被正确释放。