设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12345下一页
返回列表 发新帖
查看: 8421|回复: 40
打印 上一主题 下一主题

[模块/函数] 【原创 / 源码】Access控件事件集线器(EventsHub)发布贴(当前版本1.1)

[复制链接]
跳转到指定楼层
#
发表于 2005-8-23 17:46:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
注:最新版本请见最后的回复

模块名称:EventsHub



模块版本:V 1.0



模块介绍:

  
很多时候我们在窗体中会有很多类似的控件(比方说40多个TextBox),对于这些类似的控件我们需要编制类似的事件处理程序(比方说其中任何一个TextBox内容更新后重新计算结果),这种情况下,控件的事件编程会变得很复杂,比方说例子中提到的40多个TextBox,就要写40多个事件处理程序。一旦程序要作某些调整,这些代码也要作大量的调整。

  现在让我们告别手工作坊的事件处理年代,采用新的事件处理方式,以下模块集中捕获对象的所有事件(包括子对象的事件)。初始化的时候(InitHub方法)指定你要集中捕获事件的控件(比方说窗体),然后当这个控件或者他的子控件有任何事件发生的时候,OnEvent方法都会被自动调用,并且传递给你三个参数:发生事件的对象名,发生事件的对象的路径(父节点),发生的事件名。你可以在代码中根据这些参数来判断到底发生了什么事件,然后决定怎么处理。

模块下载:



游客,如果您要查看本帖隐藏内容请回复


模块调用范例:警告:被设定捕获事件的对象,其原先定义的事件代码将全部被接管而失效。

'调用范例

rivate Sub Form_Load()

    '窗体内所有事件,包括窗体本身

    InitHub Me

    '窗体内所有按钮

    InitHub Me, acCommandButton, 2

    '窗体本身

    InitHub Me, acForm, 1

    '选项卡Page1上所有的TextBox控件

    InitHub Page1, acTextBox, 2

    '选项卡Page1上所有的TextBox控件

    InitHub Page1, acTextBox, 2

End Sub


模块源码:














<DIV class=quote>

'Access控件事件捕获器模块 EventsHub V 1.0

Option Compare Database

Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''

'初始化捕获参数:

'objDest=捕获事件的控件(可接收窗体、窗体控件)

'以下为可选参数:

'HookDestType=需要捕获事件的控件类型(0=所有类型,默认值)

'HookType=捕获类型(0=捕获控件事件和子控件事件,默认值

'                   1=只捕获控件本身事件

'                   2=只捕获子控件事件)

'EventType=事件名(""=所有事件,默认值)

''''''''''''''''''''''''''''''''''''''''''''''''

ublic Sub InitHub(ByRef objDest As Object, Optional ByVal HookDestType As AcControlType = 0, Optional ByVal HookType As Long = 0, Optional ByVal EventType As String = "")

    EventsHook objDest, "", HookDestType, HookType, EventType

End Sub

rivate Sub EventsHook(ByRef objMe As Object, ByVal strEventSource As String, _

    ByVal HookDestType As AcControlType, ByVal HookType As Long, ByVal EventType As String)

        

    Dim objCtl As Access.Control

    Dim objPrp As Object

    Dim bolMatchType As Boolean

   

    If HookDestType = 0 Then

        bolMatchType = True

    ElseIf TypeOf objMe Is Form Then

        bolMatchType = (HookDestType = acForm)

    Else

        bolMatchType = (HookDestType = objMe.ControlType)

    End If

   

    If HookType = 1 Or HookType = 0 And bolMatchType Then

        For Each objPrp In objMe.Properties

            If objPrp.Name Like "On*" And (EventType = "" Or EventType = objPrp.Name) Then

                objPrp.Value = "=OnEvent('" & strEventSource & "','" & objMe.Name & "','" & objPrp.Name & "')"

            End If

        Next objPrp

    End If

   

    If HookType = 2 Or HookType = 0 And HookDestType <> acForm Then

        strEventSource = strEventSource & IIf(strEventSource = "", "", ".") & objMe.Name

        On Error GoTo NoChild

        For Each objCtl In objMe.Controls

            EventsHook objCtl, strEventSource, HookDestType, 0, EventType

        Next objCtl

    End If



NoChild:

    Exit Sub

End Sub

'''''''''''''''''''''''''''

'用户自定义函数,入口参数:

'strParent:发生事件的对象的父对象,如:窗体1

'strObject:发生事件的对象名,如:Command0

'strEvent:发生的事件名,如:OnClick

'''''''''''''''''''''''''''


Public Function OnEvent(ByVal s

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
40#
发表于 2015-4-15 06:47:10 | 只看该作者
謝謝你的辛勞
39#
发表于 2015-4-15 06:45:40 | 只看该作者
謝謝你的辛勞
38#
发表于 2010-1-29 13:48:30 | 只看该作者
这东西真是不错,我要好好研究一下。
37#
发表于 2009-11-6 23:48:49 | 只看该作者
kankan
36#
发表于 2009-11-6 23:24:02 | 只看该作者
tks for sharing.
35#
发表于 2009-10-31 11:18:14 | 只看该作者
啊?????天哪~
找呀找呀~终于被我找到了~

谢谢分享~学习学习
34#
发表于 2009-10-24 14:58:35 | 只看该作者
真正的高手,谢谢分享。
33#
发表于 2009-8-19 19:02:03 | 只看该作者
mark
32#
发表于 2009-8-17 09:50:46 | 只看该作者
ooook
31#
发表于 2009-5-27 17:20:39 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-4-15 11:38 , Processed in 0.101421 second(s), 37 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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