请参阅没有特定命名的表单控件

时间:2015-05-28 09:54:56

标签: vba ms-access reference access-vba

我有一个包含大量图像的表单,每个图像在单击时执行一系列操作。我可以使用每个按钮的所有操作创建一个私有子,但我认为这是低效的。相反,我想在一个宏中记录所有动作,然后在单击每个图像时调用此宏。为此,我需要单个宏来引用所选的当前图像,而不是按名称引用任何图像。这可能吗?

我目前的代码包括以下内容:

Me.Image001.BorderColor = RGB(1, 1, 1)
Me.Image001.BorderWidth = 2
Me.Image001.BorderStyle = 1

我需要修改它,以便修改选择的图像的边框颜色/宽度/样式等,而不是特定的命名图像('Image001')。

谢谢!

2 个答案:

答案 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