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