Office中国论坛/Access中国论坛

标题: ACCESS FAQ问答:管理多个同一窗体的多实例 [打印本页]

作者: 大熊    时间: 2002-5-1 22:42
标题: ACCESS FAQ问答:管理多个同一窗体的多实例
参考资料:
Purpose:当我们想同时比较两个或多个记录时,建多个窗体实例是很好选择.
Method:一个简单的方法就是放一个命令按钮在窗体中,比如说窗体名叫frmClient,其中的命令按钮命名为cmdNewInstance,该窗体的模块中,你只需要写5行代码.
Dim frmMulti As Form
Private Sub cmdNewInstance_Click()
Set frmMulti = New Form_frmClient
frmMulti.SetFocus
End Sub
打开窗体并按这个按钮,第二个client form会打开在第一个之上,并且可以显示一个不同的clinet,第二个窗体也有一个按钮,所以你也可以打开第三个…..。
但是有二个问题,首先这些窗体并不是完全独立的,关闭第一个窗体,所有窗体都会关闭.单击第二个窗体的cmdNewInstance,第三,第四…个窗体会被替换掉.由于对象变量frmMulti被定义于窗体级模块中,每个实例只支持随后的窗体实例,所以会产生这种现象.其次对窗口实例的引用也是一个问题,窗体的集体会有多个同样名称的窗体,所以类似Forms.frmClient这样的引用会带来问题,而Forms(3)这类的引用也不具操作性,因为窗口的编号会随窗口的打开与关闭而相应改变.
解决以上问题,我们可以建立一个collection对象变量在一模块中(不是窗口模块),如basPublic模块,每打开一个窗口实例后添加一个条目,关闭一个实例就移去一个条目.每个实例现在就会彼此相对独立.它们是仅依赖于collection对象.而解决窗品的标识问题,我们可以用窗口的句柄来作标识.
范例:
Public clnClient As New Collection    '定义存储窗口实例的集合变量

Function OpenAClient()
    'Purpose:   建立frmClient的新实例.
    Dim frm As Form
    '打开并显示新实例,设置标题属性
    Set frm = New Form_frmClient
    frm.Visible = True
    frm.Caption = frm.Hwnd & ", opened " & Now()
    '添加窗口实例集合变量
    clnClient.Add Item:=frm, Key:=CStr(frm.Hwnd)
    Set frm = Nothing
End Function

Function CloseAllClients()
    '关闭所有实例
    Dim lngKt As Long
    Dim lngI As Long
    lngKt = clnClient.Count
    For lngI = 1 To lngKt
        clnClient.Remove 1
    Next
End Function

CloseAllClients()显示了怎么关闭所有窗口实例,通过在clnclient集合变量移去它们.而如果用户关闭一个实例在应用介面,我们需要在窗体的Close事件中写一段代码.
Private Sub Form_Close()
    'Purpose:移去当前实例
Dim obj As Object        
Dim blnRemove As Boolean  '移除标志.
    '检查是当前窗口的句柄是否在集合变量中
    For Each obj In clnClient
        If obj.Hwnd = Me.Hwnd Then
            blnRemove = True
            Exit For
        End If
    Next

    Set obj = Nothing
    If blnRemove Then
        clnClient.Remove CStr(Me.Hwnd)
    End If
End Sub

作者: tmtony    时间: 2002-5-2 03:19
思想非常不错,大熊,上次有关collection的讨论就给用上啦,看来,学以致用是关键
作者: binbow_z    时间: 2002-5-6 03:38
标题: ACCESS FAQ问答:管理多个同一窗体的多实例
好东东
作者: 李力军2    时间: 2015-7-5 16:43
很有启发
作者: lintina892    时间: 2015-8-5 15:46
思想非常不错




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3