Подтвердить что ты не робот

Определите, установлен ли флажок доступа или нет.

Такой простой вопрос, но я не могу найти ответ (Google, MS help, SO):

Как проверить VBA, проверяется ли флажок unbound в форме Access пользователем или нет? Не удается найти правильное свойство.

Спасибо заранее!

UPDATE:

Я использовал этот код после предложений @HansUp и @RC:

Private Sub CmdTest_Click()
    MsgBox "Check1.Value = " & Me.Check1.Value
    MsgBox "Check2.Value = " & Me.Check2.Value
End Sub

Private Sub Form_Load()
    Me.Check1.Value = 25
    Me.Check2.Value = 50
End Sub

2nd UPDATE:

Код должен быть таким (спасибо @David-W-Fenton):

Private Sub CmdTest_Click()
    If Me.Check1 = True Then
        MsgBox "Check1 IS CHECKED"
    Else
        MsgBox "Check1 IS NOT CHECKED"
    End If
    If Me.Check2 = True Then
        MsgBox "Check2 IS CHECKED"
    Else
        MsgBox "Check2 IS NOT CHECKED"
    End If    
End Sub

Private Sub Form_Load()
    ' set first checkbox default checked
    Me.Check1.Value = True 
    ' set second checkbox default unchecked
    Me.Check2.Value = False
End Sub
4b9b3361

Ответ 1

Флажки - это тип управления, предназначенный для одной цели, для обеспечения правильной записи логических значений.

В Access существует два типа:

  • 2-state - можно проверить или снять флажок, но не Null. Значения True (проверены) или False (не отмечены). В Access и VBA значение True равно -1, а значение False равно 0. Для переносимости с средами, использующими 1 для True, вы всегда можете проверить False или Not False, поскольку False - это значение 0 для всех сред, которые я знаю из.

  • 3-state - как 2-состояние, но может быть Null. Щелчок на нем циклически проходит через True/False/Null. Это для привязки к целочисленному полю, которое позволяет Nulls. Это бесполезно с булевым полем, которое никогда не может быть Null.

Малый вопрос с ответами:

Практически никогда не нужно использовать свойство .Value элемента управления Access, поскольку это свойство по умолчанию. Эти два эквивалента:

  ?Me!MyCheckBox.Value
  ?Me!MyCheckBox

Единственная проблема заключается в том, что важно быть осторожным, чтобы вы не создавали неявные ссылки при проверке значения флажка. Вместо этого:

  If Me!MyCheckBox Then

... напишите один из следующих вариантов:

  If (Me!MyCheckBox) Then  ' forces evaluation of the control

  If Me!MyCheckBox = True Then

  If (Me!MyCheckBox = True) Then

  If (Me!MyCheckBox = Not False) Then

Аналогично, при написании подпрограмм или функций, которые получают значения из логического элемента управления, всегда объявляйте ваши логические параметры как ByVal, если вы на самом деле не хотите управлять элементом управления. В этом случае ваш тип данных параметров должен быть контролем доступа, а не логическим значением. Все остальное подвержено риску неявных ссылок.

В последнем случае, если вы установите значение флажка в коде, вы можете фактически установить его на любое число, а не только на 0 и -1, но любое число, отличное от 0, обрабатывается как True (потому что оно не является ложным), Хотя вы можете использовать такие вещи в HTML-форме, это не правильный дизайн пользовательского интерфейса для приложения Access, так как нет никакого способа, чтобы пользователь мог видеть, какое значение фактически хранится в элементе управления, что побеждает цель выбрав его для редактирования ваших данных.

Ответ 2

Проверьте yourCheckBox.Value?