设为首页收藏本站Access中国
Office中国(www.office-cn.net),专业Office论坛

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

ACCESS管理多个同一窗体的实例

2015-5-3 17:33| 发布者: admin| 查看: 856| 评论: 4|原作者: 大熊|来自: www.office-cn.net

摘要: 参考资料: Purpose:当我们想同时比较两个或多个记录时,建多个窗体实例是很好选择. Method:一个简单的方法就是放一个命令按钮在窗体中,比如说窗体名叫frmClient,其中的命令按钮命名为cmdNewInstance,该窗体的模块中 ...

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
好东东
引用 李力军2 2015-7-5 16:43
很有启发
引用 lintina892 2015-8-5 15:46
思想非常不错

查看全部评论(4)

关闭

站长推荐上一条 /6 下一条

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2018-10-23 11:58 , Processed in 0.080908 second(s), 25 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部