У меня есть серия текстовых полей и проверка на каждом. Если значение текстового поля проходит проверку, я хочу сделать видимым следующее текстовое поле и установить для него фокус. Если это не так, я хочу остаться в текущем текстовом поле. Тем не менее, я не могу сделать текстовое поле видимым, а затем установить фокус на него. Вот пример попытки:
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 начинает видимым, все работает правильно. Есть еще идеи?