VBA в любом случае выполнить _MouseDown до _Enter в TextBox? - PullRequest
1 голос
/ 24 февраля 2020

Мое намерение - открыть пользовательскую форму "дата рождения" при вводе текстового поля "bdayBox". А также хочу снова иметь возможность открывать пользовательскую форму "дата рождения", если она была закрыта, щелкая мышью внутри поля, но только если текстовое поле "bdayBox" в настоящее время активно.

Моя проблема в том, что если текстовое поле не активно, и я щелкаю его мышью, _Enter выполняется до _MouseDown. Это открывает пользовательскую форму "рождения" дважды. Есть ли способ выполнить _MouseDown перед _Enter или любой другой способ сделать то, что я хочу без двойных открытий?

* РЕДАКТИРОВАТЬ Прежде чем пользователь даже доберется до введенной даты рождения, он выбирает, сколько человек должно быть добавлено. Форма «дата рождения» должна отображаться только в том случае, если требуется добавить более 1 человека, и она должна появляться автоматически, когда пользователь вводит текстовое поле «bdayBox». Если присутствует только 1 человек, дополнительная форма не появится, и пользователь вводит дату рождения в само текстовое поле. Я хочу принять решение от пользователя открыть форму «Дата рождения» или нет.

Текущий код

Public bdayBoxAct As Boolean

Public Sub bdayBox_Enter()   
    birthdate.Show
    bdayBoxAct = True
End Sub

Public Sub bdayBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    bdayBoxAct = False
End Sub

Private Sub bdayBox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    If bdayBoxAct = True Then
        birthdate.Show
    End If
End Sub

Public Sub UserForm_Initialize()
    bdayBoxAct = False
End Sub

1 Ответ

0 голосов
/ 24 февраля 2020

Мне кажется, что этот подход не интуитивен для пользователя и страдает от симптомов, которые вы испытываете. Я предлагаю разместить кнопку рядом с текстовым полем bdayBox с соответствующим заголовком, сообщающим пользователю, что будет делать кнопка, которую они могут нажимать всякий раз, когда им нужно сформироваться, чтобы появиться. Кнопка заменяет логику MouseDown c. Ваш код становится:

Option Explicit

Private Sub bdayBox_Enter()
    birthdate.Show
End Sub

Private Sub ShowBirthdate_Click()
    birthdate.Show
End Sub
...