【问题标题】:How to set Focus to newly visible TextBox如何将焦点设置为新可见的文本框
【发布时间】: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 开始可见,则一切正常。还有其他想法吗?

【问题讨论】:

    标签: excel vba setfocus


    【解决方案1】:

    VBA 在这个问题上有一个老问题......有时,在某些情况下,它会丢失对某些表单控件的引用(包括文本框)。

    尝试使用乍一看看起来很愚蠢的东西来记住它:在设置焦点之前,使用:

    `Me.TextBox3.Enabled = False`
    

    紧随其后

    Me.TextBox3.Enabled = True

    只有在那之后才使用Me.TextBox3.SetFocus。

    你可能会有一个惊喜……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-24
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      相关资源
      最近更新 更多