如何清除在frame中动态创建的控件,怎么判断已经创建了控件

解决方案 »

  1.   


    Load 语句
       把窗体或控件加载到内存中。语法Load objectobjec 所在处是要加载的 Form 对象、MDIForm 对象或控件数组元素的名称。说明除非在加载窗体时不需要显示窗体,否则对于窗体不需要使用 Load 语句。在窗体还未被加载时,对窗体的任何引用(在 Set 或 If...TypeOf 语句以外)会自动加载该窗体。例如,Show 方法在显示窗体前会先加载它。一旦窗体被加载,不管它是否可见,它的属性及控件会被应用程序所改变。在某些情况下,也许需要在初始化时加载所有的窗体并在以后需要它们的时候显示它们。当 Visual Basic 加载 Form 对象时,先把窗体属性设置为初始值,再执行 Load 事件过程。当应用程序开始运行时,Visual Basic 自动加载并显示应用程序的启动窗体。在加载 MDIChild 属性为 True 的 Form(换言之,子窗体)时,而此时 MDIForm 还未被加载,那么会在子窗体前自动加载 MDIForm。因为 MDI 子窗体不能被隐藏起来,所以在 Form_Load 事件过程结束时马上可以见到 MID 子窗体。由 Visual Basic 函数产生的标准对话框,诸如 MsgBox 和 InputBox,不需要加载、显示或卸载即可简单地直接调用。
    Unload 语句
       从内存中卸载窗体或控件。语法Unload objectobject 所在处是要卸载的 Form 对象或控件数组元素的名称。说明当所占内存另有它用,或需要重新设置窗体、控件的属性为初始值时,就有必要卸载窗体或控件。在卸载窗体前,会发生 Query_Unload 事件过程,然后是 Form_Unload 事件过程。在其中任一过程中设置 cancel 参数为 True 可防止窗体被卸载。若为 MDIForm 对象,先发生 MDIForm 对象的 Query_Unload 事件过程,接着是各 MDI 子窗体 的 Query_Unload 事件过程和 Form_Unload 事件过程,最后是 MDIForm 对象的 Form_Unload 事件过程。当窗体卸载之后,所有在运行时 放到该窗体上的控件都不再是可访问的。在设计时放到该窗体上的控件将保持不变;但是,当窗体重新加载时,在运行时对这些控件及其属性的任何更改将丢失。所有对于窗体属性的更改也将丢失。对窗体上任何控件的访问会导致窗体重新加载。注意 在卸载窗体时,只有显示的部件被卸载。和该窗体模块相关联的代码还保持在内存中。只有在运行时添加到窗体上的控件数组元素才能用 Unload 语句卸载。重新加载被卸载的控件时,其属性会被重新初始化。
      

  2.   

    Private Sub Command1_Click()
        Dim cmd As Object
        Set cmd = Me.Controls.Add("VB.CommandButton", "cmd1")
        cmd.Visible = True
        MsgBox "控件添加成功!"
        Me.Controls.Remove cmd '只能删除动态添加的控件
    End Sub
      

  3.   

    for each ctl in me.controls
        if ctl.container=frame1 then
            if ctl.name=*** then unload ctl
        end if
    next
    '如果是控件数组
    for i=0 to ubound(lblArr)
        if i>0 then load lblArr(i)
    next
      

  4.   

    Dim findhandle As Long
    findhandle = FindWindowEx(Frame1.hWnd, &O0, vbNullString, vbNullString)
    If findhandle <> 0 Then
        MsgBox "有控件"
    End If