|
注:最新版本请见最后的回复
模块名称: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
|