如何在ms-access vba中单击命令按钮单击以更改代码以更改控件属性

问题描述 投票:0回答:1

我有一个userform,其中包含一组具有类似属性和功能的命令按钮。我正在使用这些按钮让用户跟踪他的活动。所以例如每当用户点击“生产”按钮时,应用程序标签就会显示“生产”模式,当用户按下“中断”按钮时,标签将从“生产”模式变为“中断”模式,同样我总共有7-8个按钮在同一表格上。其他条件是按下任何按钮,按钮应该被禁用,所有其他按钮应该被启用,然后是下一个按钮,如果按下它应该被禁用,它应该启用之前按下的按钮。

按下的按钮也会改变颜色,还应将前一个按钮的颜色恢复正常。

我理解这个场景很难理解,请查看下面的代码,了解我的一个按钮及其工作情况。

Private Sub btn1()
    Me.Label78.Caption = Me.btn1.Caption
    Me.btn1.BackColor = RGB(250, 100, 100)
    Me.btn1.Gradient = 12
    Me.btn1.Enabled = False
    Me.btn2.Enabled = True
    Me.btn2.BackColor = RGB(100, 250, 100)
    Me.btn2.Gradient = 12
    Me.btn3.Enabled = True
    Me.btn3.BackColor = RGB(100, 250, 100)
    Me.btn3.Gradient = 12
End Sub

上面的代码工作perfeclty并将属性更改为3个按钮(其示例代码不是所有7个按钮的代码),但我总共有7-8个按钮,如果我继续编写这种代码,我可能会在将来添加更多按钮在所有7-8个按钮的一个按钮中,则需要花费大量时间和效果。

那么缩短这段代码的最佳方法是什么?

我知道这有点复杂,因此请询问是否需要更多信息。提前致谢 !!

access-vba ms-access-2010
1个回答
0
投票

你可以有一个辅助子功能:

Private Sub SetButton(ByVal ButtonId As Long, ByVal Enabled As Boolean)

    Dim BackColor As Long

    If Enabled Then
        BackColor = RGB(100, 250, 100)
    Else
        BackColor = RGB(250, 100, 100)
    End If

    With Me("btn" & Cstr(Id))
        .Enabled = Enabled
        .Gradient = 12
        .BackColor = BackColor
    End With

End Sub

然后在OnClick事件中调用它,如:

For Id = 1 To 8
    Select Case Id
        Case 1, 2, 4, 7
            SetButton Id, True
        Case Else
            SetButton Id, False
    End Select
Next
© www.soinside.com 2019 - 2024. All rights reserved.