Есть ли способ определить, нажал ли пользователь отключенную кнопку? - PullRequest
2 голосов
/ 11 марта 2019

Эй, у меня есть пользовательская форма, в которую пользователь вводит профиль varius поля.

Как только оно заполнено, происходит проверка - если что-то сбивается, CommandButton с именем save_button отключен

То, чего я хочу достичь, это : если пользователь нажимает на кнопку, когда она находится в отключенном состоянии, чтобы отобразить MsgBox, говоря, что ему нужно исправить неправильно заполненное поле


В целях демонстрации я не буду вставлять сюда процедуры проверки, поэтому давайте просто притворимся, что save_button.Enabled = False установлен из getgo. Выдает тот же результат.

save_button.Enabled = False ' already ran before, pretend this executes it
Private Sub save_button_Click()
    If save_button.Enabled = False Then
        MsgBox "Clicked disabled button"
    End If
End Sub

Проблема в том, что, если CommandButton установлен на .Enabled = False, тогда он больше не может быть официально нажат (следовательно, он не может даже вызвать Click() процедуру)


Моей следующей мыслью было использование MouseUp в качестве замены. Проблема есть, это вызывает любое незначительное движение по кнопке, и я не хочу бомбардировать пользователя с помощью MsgBox es


enter image description here

Можете ли вы придумать какие-либо альтернативы, как определить, нажал ли пользователь отключенную кнопку?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Когда элемент управления отключен, событие щелчка всплывает вверх по дереву.В вашем случае, я думаю, пользовательская форма получит вместо этого клик.Если вы поместите свою кнопку сохранения в рамку, она получит щелчок, если кнопка отключена.Довольно просто сделать кадр невидимым, установив для

  • Caption значение ""
  • BorderStyle для fmBorderStyleNone
  • SpecialEffect для fmSpecialEffectFlat

А затем измените размер рамки так, чтобы она соответствовала размеру кнопки.Код прост:

Private Sub YourNewFrame_Click()
    MsgBox "Save button disabled!"
End Sub

Совет. Если вы нарисуете рамку, отрежете кнопку и вставите ее в новую рамку, она будет размещена правильно.Правильно, как в правой части иерархии.Визуально вам придется делать это вручную.

1 голос
/ 11 марта 2019

Я хочу предложить другой подход, основанный на моем комментарии к вашему вопросу.

На рисунке ниже вы увидите, что «Создать форму» не активируется, пока не будет предоставлена ​​вся необходимая информация.Вы не видите этого в gif-файле, но каждая запись, требующая проверки, также имеет это за кулисами в коде.

enter image description here

Необходимыекод этого действия:

Sub checkFields()

    Select Case True

        Case Len(Me.formTitleLine1) = 0, Len(Me.formPrefix) = 0, Len(Me.formNumber) = 0, Len(Me.formProduct) = 0, Len(Me.formEditionMonth) = 0, Len(Me.formEditionYear) = 0
            Me.createForm.Enabled = False
        Case Else
            Me.createForm.Enabled = True
    End Select

End Sub

И он вызывается для события afterUpdate каждого соответствующего поля:

Private Sub formEditionYear_AfterUpdate()

    checkFields

End Sub

С одним небольшим изменением в подпункте checkFields вы можетепоказывать кнопку сохранения только после того, как все заполнено правильно.Это изменение будет:

Me.createForm.Visible

вместо

Me.createForm.Enabled
...