我试着写一个简单的日历来选择日期。我有一个PushButtons数组,现在我尝试以编程方式添加事件处理程序。
Public Sub Initialize()
If EventID = 0 Then
GetEmployeeData
EventType = "Attendance"
Else
GetEventData
End If
Dim Days
Days = Array(Sunday0, Monday0, Tuesday0, Wednesday0, Thursday0, Friday0, Saturday0, _
Sunday1, Monday1, Tuesday1, Wednesday1, Thursday1, Friday1, Saturday1, _
Sunday2, Monday2, Tuesday2, Wednesday2, Thursday2, Friday2, Saturday2, _
Sunday3, Monday3, Tuesday3, Wednesday3, Thursday3, Friday3, Saturday3, _
Sunday4, Monday4, Tuesday4, Wednesday4, Thursday4, Friday4, Saturday4, _
Sunday5, Monday5, Tuesday5, Wednesday5, Thursday5, Friday5, Saturday5)
Dim j As Long
For j = 0 To 41
AddHandler Days(j).Click, AddressOf Calendar_Click
Next j
End Sub
Public Sub Calendar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim CalendarDay As Integer
CalendarDay = Convert.Int32(sender.Caption)
MsgBox (CalendarDay)
End Sub但是,当我试图运行该表单时,会收到一条错误消息:
编译错误:用户定义类型未定义.
更新
我将事件处理程序签名更改为:
Public Sub Calendar_Click(ByVal sender As Object)但是现在我得到了以下错误:
编译错误:使用AddressOf操作符无效
发布于 2018-08-17 11:51:18
您当然可以在Access中使用动态事件处理程序。但是每个对象都需要有自己的事件处理程序。
您可以为每个按钮使用一个单独的类,也可以使用一个类来管理按钮和事件。
您可以使用以下代码:
clsCalendar (创建事件处理程序并接收回事件的类)
Dim collButtonHandlers As Collection
Public Sub Initialize()
Dim Days
Days = Array(Sunday0, Monday0, Tuesday0, Wednesday0, Thursday0, Friday0, Saturday0, _
Sunday1, Monday1, Tuesday1, Wednesday1, Thursday1, Friday1, Saturday1, _
Sunday2, Monday2, Tuesday2, Wednesday2, Thursday2, Friday2, Saturday2, _
Sunday3, Monday3, Tuesday3, Wednesday3, Thursday3, Friday3, Saturday3, _
Sunday4, Monday4, Tuesday4, Wednesday4, Thursday4, Friday4, Saturday4, _
Sunday5, Monday5, Tuesday5, Wednesday5, Thursday5, Friday5, Saturday5)
'I assume that array is now filled with command buttons
'Consider taking the array as input from a form
Dim j As Long
For j = 0 To 41
AddButtonHandler Days(j)
Next j
End Sub
Public Sub AddButtonHandler(btn As Access.CommandButton)
Dim ButtonHandler As New clsCalendarButtonHandler
ButtonHandler.Initialize btn, Me
collButtonHandlers.Add ButtonHandler
End Sub
Public Sub Calendar_Click(btn As Access.CommandButton)
Dim CalendarDay As Integer
CalendarDay = CLng(btn.Caption)
MsgBox (CalendarDay)
End SubclsCalendarButtonHandler (管理单个按钮事件并将其传递给管理类的类):
Dim cCalendar As clsCalendar
Dim btn As Access.CommandButton
Public Sub Initialize(cmdBtn As Access.CommandButton, Calendar As clsCalendar)
Set cCalendar = Calendar
Set btn = cmdBtn
btn.OnClick = "[Event Procedure]"
End Sub
Private Sub btn_Click()
cCalendar.Calendar_Click(btn)
End Sub发布于 2018-08-17 04:38:04
这在2016年是不可能的。处理程序存在于VB.Net中,而不在Access VBA中。我只能想到这样的事情。但如果这是另一个有意义的问题:
Public Sub MyEventSelection(Day As String)
Select Case Day
Case "Sunday0"
Call Sunday0()
Case "Monday0"
Call Monday0()
'And so on...
End Select
End Sub
Public Sub Sunday0()
'Do Stuff
End Sub
Public Sub Monday0()
'Do Stuff
End Sub也许你应该重新考虑你需要的代码。
https://stackoverflow.com/questions/51886276
复制相似问题