Событие выхода не срабатывает правильно в TextBoxes - PullRequest
0 голосов
/ 12 июня 2019

У меня вопрос к форме, которую я создаю в данный момент. Это в основном простая форма для ввода сетевых данных. У меня есть алгоритм для проверки действительных IP-адресов и я хочу, чтобы текстовые поля стали красными в случае ввода неправильных данных. Это хорошо работает для большинства текстовых полей, но для некоторых оно показывает странное поведение.

Изображение формы пользователя:

enter image description here

Я использую функции выхода в текстовых полях для проверки, поэтому ящики не становятся красными сразу, пока вы все еще вводите вещи. Вот код для этого:

Private Sub LANGW_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsValidIP(AddHost.LANGW) = False Then AddHost.LANGW.BackColor = RGB(255, 0, 0) Else AddHost.LANGW.BackColor = RGB(255, 255, 255)
End Sub

Теперь к вопросу. Этот код отлично работает для всех текстовых полей, кроме последних в каждой области. В этом случае шлюз Lan и запрос / получение. Они не срабатывают, когда я покидаю textBox, а когда я возвращаюсь в ту же самую рамку после выхода из TextBox один раз. Может кто-нибудь придумать объяснение этому? Я уже просмотрел описание Microsoft о событии выхода, но ничего не смог найти.

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Так что я понял это.Вот ответ для всех, кто сталкивается с одной и той же проблемой.

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

Чтобы обойти это, я теперь просто помещаю те же проверки и в событие выхода из фрейма, и это прекрасно работает.Потому что они будут выполнены при выходе на другой кадр.(Да, это приведет к тому, что код будет выполнен во второй раз, если фрейм снова окажется в фокусе, но в данном конкретном случае это не повредит. Если вы хотите выполнить что-то более значимое для такого события, вам следуетограничить проверку только событием выхода кадра)

Пример:

Private Sub LAN_Exit(ByVal Cancel As MSForms.ReturnBoolean)

If IsValidIP(AddHost.LANIP) = False Then AddHost.LANIP.BackColor = RGB(255, 0, 0) Else AddHost.LANIP.BackColor = RGB(255, 255, 255)
If IsValidIP(AddHost.LANSubnet) = False Then AddHost.LANSubnet.BackColor = RGB(255, 0, 0) Else AddHost.LANSubnet.BackColor = RGB(255, 255, 255)
If IsValidIP(AddHost.LANGW) = False Then AddHost.LANGW.BackColor = RGB(255, 0, 0) Else AddHost.LANGW.BackColor = RGB(255, 255, 255)

End Sub
0 голосов
/ 12 июня 2019

Не могли бы вы сначала попытаться удалить текстовое поле «Шлюз», а затем снова вставить его в форму с другим именем, например gateway2?

затем попробуйте что-нибудь простое, например, "msgbox ('все заработало')" внутри подпрограммы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...