我在 MS Access 中有一個表單,頂部有 12 個按鈕,用作列標題。對于每個按鈕,都有一個呼叫相同公共函式的 On Click 事件。此函式(如下所示)打開與單擊的按鈕對應的欄位的過濾器選單。
Public Function HeaderClick(HeaderName As String)
DoCmd.GoToControl "[" & HeaderName & "]"
DoCmd.RunCommand acCmdFilterMenu
End Function
例如,我單擊“名字”按鈕,它會調出“名字”的過濾器選單:

我想知道是否有辦法HeaderClick在單擊這些按鈕中的任何一個時進行呼叫。換句話說,我想要一種替代方法來創建 12 個單獨的點擊事件。原因是這是我在許多資料庫中的許多表單上使用的技術。只是看起來效率不高。
uj5u.com熱心網友回復:
當您單擊 OnClick 文本框以添加新函式時,您通常會看到文本[Event Procedure]。只需用函式的名稱覆寫它(確保函式在全域模塊中)。因此[Event Procedure],您將輸入=HeaderClick("Name"). 您仍然需要為函式指定引數。
uj5u.com熱心網友回復:
你會創建一個類,我已經像這樣呼叫了我的 clsCustomButton
Option Explicit
Private WithEvents cmdCustom As CommandButton
Public Sub Initialise(cmdIn As CommandButton)
Set cmdCustom = cmdIn
cmdCustom.OnClick = "[Event Procedure]"
End Sub
Private Sub cmdCustom_Click()
MsgBox "Hello"
End Sub
Private Sub Class_Terminate()
Set cmdCustom = Nothing
End Sub
在標準代碼模塊中,您需要有一個集合/陣列來保存這個“新”自定義按鈕,我稱之為 colButtons
Option Explicit
Public colButtons As Collection
然后你需要通過傳入你想改變的按鈕來添加到集合中,我剛剛做了一個,但你可以回圈所有或指定使用標簽/名稱來做到這一點。像這樣,從表單中,通常在打開時
Dim clsCommandButton As clsCustomButton
Set colButtons = New Collection
Set clsCommandButton = New clsCustomButton
clsCommandButton.Initialise Me.Command0
colButtons.Add clsCommandButton, CStr(colButtons.Count)
uj5u.com熱心網友回復:
另一個例子是我的Windows Phone 主題顏色選擇器,其中捕獲了對文本框的點擊:
形式:
Option Explicit
' Form to display the Windows Phone 7.5/8.0 colour theme.
' Also works as a basic example of implementing WithEvents for a form.
' 2017-04-19. Gustav Brock, Cactus Data ApS, CPH.
' Version 1.0.0
' License: MIT.
' *
Private ControlCollection As Collection
Private Sub Form_Load()
' Load events for all colour value textboxes.
Dim EventProcedure As ClassTextboxSelect
Dim Control As Access.Control
Set ControlCollection = New Collection
For Each Control In Me.Controls
If Control.ControlType = acTextBox Then
Set EventProcedure = New ClassTextboxSelect
EventProcedure.Initialize Control
ControlCollection.Add EventProcedure, Control.Name
End If
Next
Set EventProcedure = Nothing
Set Control = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Unload events for all colour value textboxes.
Dim EventProcedure As ClassTextboxSelect
For Each EventProcedure In ControlCollection
EventProcedure.Terminate
Next
Set EventProcedure = Nothing
Set ControlCollection = Nothing
End Sub
班級:
Option Explicit
' Helper class for form Palette for event handling of textboxes.
' 2017-04-19. Gustav Brock, Cactus Data ApS, CPH.
' Version 1.0.0
' License: MIT.
' *
Private Const EventProcedure As String = "[Event Procedure]"
Private WithEvents ClassTextBox As Access.TextBox
Attribute ClassTextBox.VB_VarHelpID = -1
Public Sub Initialize(ByRef TextBox As Access.TextBox)
Set ClassTextBox = TextBox
ClassTextBox.OnClick = EventProcedure
End Sub
Public Sub Terminate()
Set ClassTextBox = Nothing
End Sub
Private Sub ClassTextBox_Click()
' Select full content.
ClassTextBox.SelStart = 0
ClassTextBox.SelLength = Len(ClassTextBox.Value)
' Display the clicked value.
ClassTextBox.Parent!CopyClicked.Value = ClassTextBox.Value
' Copy the clicked value to the clipboard.
DoCmd.RunCommand acCmdCopy
End Sub
完整代碼、可供下載的 Access 應用程式和VBA.ModernTheme 上的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/358950.html
上一篇:vba介面類
