VB表单验证问题

时间:2012-04-15 10:47:16

标签: .net vb.net winforms validation focus

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

1 个答案:

答案 0 :(得分:2)

您遇到的问题是由于未仔细阅读文档而导致的。 LostFocus event的文档清楚地表明你应该尝试在此事件的处理程序方法中设置焦点(例如,通过调用Focus method):

  

<强>注意

     

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

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

如果输入有效,则不执行任何操作。如果输入有效,则将Cancel参数的CancelEventArgs属性设置为true,从而导致所有下游事件被抑制。

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