【问题标题】:Access: Disable comboboxes访问:禁用组合框
【发布时间】:2018-12-28 09:25:53
【问题描述】:

我的表单中有 5 个组合框,我希望用户只能选择 2 个。选择 2 个后,其他 3 个将被禁用?我是怎么做的?我知道你可以做一个组合框并通过 afterupdate 禁用其余的组合框,如下所示。感谢你的帮助! :)

Private Sub cboOR_AfterUpdate()
Me.cboA.Enabled = False
End Sub

【问题讨论】:

    标签: ms-access combobox


    【解决方案1】:

    看看这个

    Private Sub Combo0_AfterUpdate()
        If CheckCombo Then
            disableCombo
        Else
            enableCombo
        End If
    End Sub
    
    
    
    Private Sub Combo10_AfterUpdate()
      If CheckCombo Then
            disableCombo
        Else
            enableCombo
        End If
    End Sub
    
    Private Sub Combo12_AfterUpdate()
      If CheckCombo Then
            disableCombo
        Else
            enableCombo
        End If
    End Sub
    
    Private Sub Combo14_AfterUpdate()
      If CheckCombo Then
            disableCombo
        Else
            enableCombo
        End If
    End Sub
    
    Private Sub Combo16_AfterUpdate()
      If CheckCombo Then
            disableCombo
        Else
            enableCombo
        End If
    End Sub
    
    
    Private Function CheckCombo() As Boolean
    
      Dim retVal As Long
      retVal = IIf(Len(Nz(Combo0, "")) > 0, 1, 0) + IIf(Len(Nz(Combo10, "")) > 0, 1, 0) + IIf(Len(Nz(Combo12, "")) > 0, 1, 0) + IIf(Len(Nz(Combo14, "")) > 0, 1, 0) + IIf(Len(Nz(Combo16, "")) > 0, 1, 0)
      CheckCombo = (retVal >= 2)
    
    End Function
    
    Private Sub enableCombo()
        Combo0.Enabled = True
        Combo10.Enabled = True
        Combo12.Enabled = True
        Combo14.Enabled = True
        Combo16.Enabled = True
    End Sub
    
    Private Sub disableCombo()
        If Len(Nz(Combo0, "")) <= 0 Then Combo0.Enabled = False
        If Len(Nz(Combo10, "")) <= 0 Then Combo10.Enabled = False
        If Len(Nz(Combo12, "")) <= 0 Then Combo12.Enabled = False
        If Len(Nz(Combo14, "")) <= 0 Then Combo14.Enabled = False
        If Len(Nz(Combo16, "")) <= 0 Then Combo16.Enabled = False
    End Sub
    

    【讨论】:

      【解决方案2】:

      把这个Sub放到表单的模块中

      Private Sub changeStateOfCB()
      
          Dim nameChB() As String
          Dim cMax As Long
          Dim ctrl As Control
          Dim cValued As Long
          Dim nameCurr As Variant
      
          ' names of CB
          nameChB = Split("ComboName1#ComboName2#ComboName3#ComboName4#ComboName5", "#")
          ' max allowed values
          cMax = 2
      
          ' counting with values
          For Each nameCurr In nameChB
              If Not Me.Controls(nameCurr).Value Is Null Then
                  cValued = cValued + 1
              End If
          Next
          ' disabling if needed
          For Each nameCurr In nameChB
              If Not Me.Controls(nameCurr).Value Is Null Then
                  Me.Controls(nameCurr).Enabled = (cValued < cMax)
              End If
          Next
      
      End Sub
      

      根据您在nameChB 行中的名称更改字符串中的名称。 并为每个组合框创建 AfterUpdate 调用事件过程

      changeStateOfCB
      

      【讨论】:

        猜你喜欢
        • 2011-02-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-09
        • 1970-01-01
        相关资源
        最近更新 更多