如何根据需要把重点文本(How to put focus to textbox as needed)

2019-07-29 18:00发布

我有一个窗体的文本框。 如果用户没有在这个文本框中输入任何内容,我需要陷阱,迫使一个条目。 我能做到这一点很容易不够,而是通知他们需要一个条目的用户THT后,我想将焦点返回到文本框。 现在,它没有做到这一点。 这里是我的代码:

Private Sub txtAnswer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

Select Case KeyCode
    Case 13:
        If Me.txtAnswer.Value = "" Then
            temp = MsgBox("You need to enter an answer!", vbCritical + vbOKOnly, "No Answer Found!")
            Me.txtAnswer.SetFocus
        Else
            recordAnswer
        End If
    End Select

End Sub

中,如果文本框留空,则弹出提示对话框此代码工作正常。 清除消息框,如果我打又马上进入后,消息框再次出现,这表明重点是在文本框。 但是,如果我尝试输入一个字符(例如像数字“1”)没有出现在文本框中。

任何人都可以建议我怎么能找回焦点在这个文本框的方式,将允许用户输入数据? 谢谢!

Answer 1:

你为什么不使用“确定”按钮,完成动作?

而他们的形式输入你不应该打扰邮件用户。 做结尾。

Private Sub OK_Click()

    '// Validate form
    If txtAnswer.Text = vbNullString Then
        MsgBox "You need to enter an answer!", vbExclamation, "No Answer Found!"
        txtAnswer.SetFocus
        Exit Sub
    End If

    '// You have reached here so form is correct carry on
    recordAnswer

End Sub

如果你真的想使用你要的行为,那么试试这个:

Private Sub txtAnswer_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

    Select Case KeyCode
    Case 13:
        If Me.txtAnswer.Value = "" Then
            temp = MsgBox("You need to enter an answer!", vbCritical + vbOKOnly, "No Answer Found!")              
            KeyCode = 0
        Else
            recordAnswer
        End If
    End Select

End Sub

问题是,在你的代码要设置焦点,但回车键是继射击。 你并不需要设置焦点,因为该文本已经有你只需要取消回车键的焦点。



Answer 2:

其他答案似乎非常复杂。 我有一个类似的问题,真的想要一个文本警告。 这似乎容易,我只是做会显示出来,如果输入是不正确的窗体上的隐形标签。 我也做了标签,红色的背景,这样用户会发现事情不对劲。 这样做,这样保持光标可见,右他们离开的地方。

Public Function amount(ByRef cont As MSForms.TextBox) As Integer
'makes sure that a number is used
'could change to account for decimals if necessary
Dim i As Long
On Error Resume Next
i = 0
If (cont.Value = "") Then Exit Function
    Do While i < 1000000
        If (cont.Value = i) Then
            UserForm1.Label257.Visible = False
            Exit Function
        End If
        i = i + 1
    Loop
UserForm1.Label257.Visible = True
amount = 1
End Function

Public Sub qty_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If amount(UserForm1.qty) = 1 Then
    Cancel = True
End If
End Sub

我希望这有助于其他谁以后遇到这个问题。



Answer 3:

看着上面的代码,我假设我计数器是保持下去? 对不起有点生疏了,已经几年,因为我已经做了代码。

无论如何,如果多数民众赞成的情况下,你总是可以运行它,而I = 0,这样做(或在真)。

对不起,第一次在这里发帖,希望是有道理的。



文章来源: How to put focus to textbox as needed