Как установить Фокус на вновь видимый TextBox - PullRequest
0 голосов
/ 16 марта 2020

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

Private Sub TextBox2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If (IsNumeric(TextBox2.Value)) Then
    TextBox3.Visible = True
    'BoxForm.Repaint
    TextBox3.SetFocus
Else
    StatusLabel.Caption = "Box 2: not a number"
    Cancel = True
End if
end sub

Я пытался поместить оператор setfocus в несколько разных обработчиков событий, но это не помогает. Также форма не перекрашивается. Если TextBox3 уже виден, он будет работать нормально. Как мне это сделать?

edit: я пытался использовать совет FainDuru (спасибо!) Для отключения и повторного включения TextBox3 (в _BeforeUpdate, затем в _afterUpdate), но ни один из них, похоже, не дал никакого эффекта. _Repaint тоже не помогает. Фокус хочет go к следующему виджету, который был виден до последовательности событий. Я даже попытался перефокусироваться назад на событие _Enter следующего виджета, но это ничего не дает. Как будто TextBox3 не активируется до тех пор, пока не закончится каскад событий. Если TextBox3 начинает видимым, все работает правильно. Есть еще идеи?

1 Ответ

0 голосов
/ 16 марта 2020

VBA имеет старую проблему в этом вопросе ... Иногда, при некоторых обстоятельствах, он теряет ссылку на некоторые элементы управления формой (включая текстовое поле).

Попытайтесь вспомнить это, используя что-то, что, на первый взгляд, выглядело бы глупо: Перед настройкой фокуса используйте:

`Me.TextBox3.Enabled = False`

, затем

Me.TextBox3.Enabled = True

И только после этого используйте Me.TextBox3.SetFocus.

У вас может быть приятный сюрприз ...

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