我正在创建一个表单,该表单允许用户选择任意数量的Sig,因此我可以使用值自动填充记录集。我重新创建了一个复选框选项组,因为管理层/主管说默认复选框太小。
我有此代码,该代码可以正常工作,但我想知道是否有一种方法可以创建一个更通用的函数,以便可以在每个OnClick事件上重用,而不用粘贴相同的代码并进行较小的更改36次。
Private Sub lblChkSig1_Click()
mblnArray(0) = Not (mblnArray(0))
If mblnArray(0) Then
lblChkSig1.Caption = Chr(80) 'check mark
lblChkSig1.BackColor = RGB(0, 128, 0) 'Dark Green
Else
lblChkSig1.Caption = ""
lblChkSig1.BackColor = RGB(255, 255, 255) 'White
End If
End Sub
数组mblnArray
只是36个布尔值的数组,我经常使用它们,因此我可以快速遍历它们。我之前已经做过,但是只有多达4个值才是重做所有代码的问题。既然我有更多的选择集,我决定要对其进行更改以使其可重用。
我想出了此功能的替代品,但我不知道如何动态更改更新的标签。
Private Sub UpdateChecks(iPos As Integer)
Dim ctlCurrentControl as Label
Set cltCurrentControl = Me.ActiveControl
mblnArray(iPos) = Not (mblnArray(iPos))
If mblnArray(iPos) Then
ctlCurrentControl.Caption = Chr(80) 'check mark
ctlCurrentControl.BackColor = RGB(0, 128, 0) 'Green
Else
ctlCurrentControl.Caption = ""
ctlCurrentControl.BackColor = RGB(255, 255, 255) 'White
End If
End Sub
我在寻找标签不能作为表单的Active Control的解决方案时发现了。我也尝试过
Dim ctlCurrentControl as Label
Set ctlCurrentControl = "lblChkSig" & iPos
但是那也不起作用。我不知道从这里开始。我不确定这是否可以完成,但是如果有解决方案,那将非常有帮助。
答案 0 :(得分:2)
您可以使用切换按钮,它们甚至可以具有关联的标签,单击该标签可以切换按钮。您可以将白色X用作所有切换按钮的标题,让它们在显示时具有白色前景色(因此您将看不到白色X)和深绿色。只是玩弄颜色,直到适合为止。这样,您将不需要任何代码来切换颜色或标题。
例如,我使用
屏幕截图:
答案 1 :(得分:1)
我想知道是否有一种方法可以创建更通用的函数 我可以在每个OnClick事件上重用,而不必粘贴相同的事件 代码进行了36次细微改动。
这正是 WithEvents 的目的。
我有一个包含60个控件的表单,并写了一篇有关如何执行此操作的文章:
Create Windows Phone Colour Palette and Selector using WithEvents
核心是这个简单的类:
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
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
表格中所需的代码仅是:
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
完整代码也位于 GitHub 上:VBA.ModernTheme