设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5133|回复: 4
打印 上一主题 下一主题

[窗体] ACCESS FAQ问答:管理多个同一窗体的多实例

[复制链接]
跳转到指定楼层
1#
发表于 2002-5-1 22:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
参考资料:
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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2002-5-2 03:19:00 | 只看该作者
思想非常不错,大熊,上次有关collection的讨论就给用上啦,看来,学以致用是关键
3#
发表于 2002-5-6 03:38:00 | 只看该作者

ACCESS FAQ问答:管理多个同一窗体的多实例

好东东
4#
发表于 2015-7-5 16:43:01 | 只看该作者
很有启发
回复

使用道具 举报

5#
发表于 2015-8-5 15:46:06 | 只看该作者
思想非常不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 07:22 , Processed in 0.072438 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表