【发布时间】:2020-03-16 13:49:06
【问题描述】:
我有一系列文本框,每个文本框都有验证。 如果文本框值通过验证,我想让下一个文本框可见,并将焦点设置为它。如果没有,我想保留在当前文本框上。 但是,我无法使文本框可见,然后将焦点设置为它。 这是一个示例尝试:
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 已经可见,它将正常工作。 我该怎么做?
编辑: 我尝试使用 FainDuru 的建议(谢谢!)禁用和重新启用 TextBox3(在 _BeforeUpdate 中,然后在 _afterUpdate 中),但似乎都没有任何效果。 _Repaint 也无济于事。焦点想要转到在事件序列之前可见的下一个小部件。我什至尝试从下一个小部件的 _Enter 事件重新聚焦,但这无济于事。好像直到事件级联结束后 TextBox3 才被激活。如果 TextBox3 开始可见,则一切正常。还有其他想法吗?
【问题讨论】: