我有一个包含大量图像的表单,每个图像在单击时执行一系列操作。我可以使用每个按钮的所有操作创建一个私有子,但我认为这是低效的。相反,我想在一个宏中记录所有动作,然后在单击每个图像时调用此宏。为此,我需要单个宏来引用所选的当前图像,而不是按名称引用任何图像。这可能吗?
我目前的代码包括以下内容:
Me.Image001.BorderColor = RGB(1, 1, 1)
Me.Image001.BorderWidth = 2
Me.Image001.BorderStyle = 1
我需要修改它,以便修改选择的图像的边框颜色/宽度/样式等,而不是特定的命名图像('Image001')。
谢谢!
答案 0 :(得分:1)
你应该使用事件下沉
通过事件下沉,您可以将事件绑定到您自己的程序。
您可以在此处查看示例http://p2p.wrox.com/access-vba/37472-event-triggered-when-any-control-changed.html
简单来说,您可以创建一个模块,将事件绑定到您的特定实现。然后在您感兴趣的表单上创建一个集合,在其中注册您想要的控件"关注"事件下沉......
我的副下沉复选框(我有很多)
第一个类模块名称SpecialEventHandler
Option Compare Database
Private WithEvents chkbx As CheckBox
Private m_Form As Form
Private Const mstrEventProcedure = "[Event Procedure]"
Public Function init(chkbox As CheckBox, frm As Form)
Set chkbx = chkbox
Set m_Form = frm
'Debug.Print frm.Name
chkbx.AfterUpdate = mstrEventProcedure
End Function
Private Sub chkbx_AfterUpdate()
'your Code here
End Sub
Private Sub Class_Terminate()
Set chkbx = Nothing
Set m_Form = Nothing
End Sub
然后在表单上使用事件下沉
Option Compare Database
Dim spEventHandler As SpecialEventHandler
Private colcheckBoxes As New Collection
Private Sub Form_Open(Cancel As Integer)
Dim ctl As Control
For Each ctl In Me.Detail.Controls
Select Case ctl.ControlType
Case acCheckBox
Set spEventHandler = New SpecialEventHandler
spEventHandler.init Controls(ctl.NAME), Me
colcheckBoxes.Add spEventHandler
End Select
Next ctl
End Sub
答案 1 :(得分:0)
您可以随时创建一个标准子,然后单击该按钮调用它。像
这样的东西Public Sub changeColor(frm As Form, ctrl As Control)
frm.Controls(ctrl.Name).BorderColor = RGB(1, 1, 1)
frm.Controls(ctrl.Name).BorderWidth = 2
frm.Controls(ctrl.Name).BorderStyle = 1
End Sub
因此,当您单击图像时,您只需要
Private Sub Image001_Click()
changeColor Me, Image001
End Sub