-1

我在 VB 中进行表单验证,我使用txtName_LostFocus函数验证文本字段数据,并在错误输入时使用txtName.Focus(). 这对我来说很有用。但问题是,至于用户没有输入有效文本,我的退出按钮也不起作用。是否有任何解决方案来纠正此解决方案。

4

1 回答 1

2

您遇到的问题是由于没有仔细阅读文档造成的。该LostFocus事件的文档非常清楚地表明,您不应尝试在此事件的处理程序方法中设置焦点(例如,通过调用Focusmethod ):

警告

不要尝试从 Enter、GotFocus、Leave、LostFocus、Validating 或 Validated 事件处理程序中设置焦点。这样做可能会导致您的应用程序或操作系统停止响应。有关详细信息,请参阅“键盘输入参考”部分中的主题,以及位于http://msdn.microsoft.com/libraryWM_KILLFOCUS的 MSDN 库中“关于消息和消息队列”主题的“消息死锁”部分。

更好的解决方案是处理Validating事件。您将在Validating由 .NET Framework 自动引发的事件处理程序方法中执行输入验证。

如果输入有效,则您什么也不做。如果输入无效,则将参数的Cancel属性设置为,从而抑制所有下游事件。CancelEventArgstrue

Private Sub myTextBox_Validating(ByVal sender As Object, _
                                 ByVal e As ComponentModel.CancelEventArgs) _
                             Handles myTextBox.Validating
    If Not Valid(myTextBox.Text) Then
        ' Validation failed, so cancel the event and pre-select the text.
        e.Cancel = True
        myTextBox.Select(0, myTextBox.Text.Length)

        ' Optionally (but recommended): Set an ErrorProvider control.
        ' errorProvider.SetError(myTextBox, "Invalid input")
    End If
End Sub
于 2012-04-15T10:58:33.543 回答