2012-04-15 16 views
-1

Ich mache Formular-Validierung in VB, validiere ich die Textfeld Daten mit txtName_LostFocus Funktion, und auf falsche Eingabe habe ich txtName.Focus(). Es funktioniert gut für mich. Aber das Problem ist, dass, als Benutzer keinen gültigen Text eingeben, meine EXIT-Taste funktioniert auch nicht. Gibt es eine Lösung, um diese Lösung zu korrigieren?VB Formular Validierung Problem

+0

können Sie den Code platzieren, was Sie gerade tun. – coder

Antwort

2

Die Probleme, die Sie feststellen, resultieren aus dem nicht sorgfältigen Lesen der Dokumentation. Die Dokumentation für die LostFocus event sehr deutlich machen, dass Sie sollten nicht Versuch, den Fokus zu setzen (zB durch die Focus method Aufruf) in der Behandlermethode für diese Veranstaltung:

Vorsicht

Do not Versuchen Sie, den Fokus innerhalb der Ereignishandler Enter, GotFocus, Leave, LostFocus, Validieren oder Validiert festzulegen. Dies kann dazu führen, dass Ihre Anwendung oder das Betriebssystem nicht mehr reagiert. Weitere Informationen finden Sie im Thema WM_KILLFOCUS im Abschnitt "Tastatureingangsreferenz" und im Abschnitt "Nachrichten-Deadlocks" des Abschnitts "Informationen zu Nachrichten und Nachrichtenwarteschlangen" in der MSDN-Bibliothek unter http://msdn.microsoft.com/library.

Eine bessere Lösung ist die Validating event zu behandeln. Sie werden Ihre Eingabe innerhalb der Ereignishandlermethode Validating validieren, die automatisch von .NET Framework ausgelöst wird.

Wenn die Eingabe gültig ist, tun Sie nichts. Wenn die Eingabe nicht gültig ist, legen Sie die Cancel -Eigenschaft des CancelEventArgs-Parameters auf true fest, was dazu führt, dass alle Downstream-Ereignisse unterdrückt werden.

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 
+0

Es funktioniert gut, aber Benutzer kann nicht beenden, bis gültige Informationen. Ich möchte, dass der Benutzer das Formular verlassen/verlassen kann, er/sie hat falschen Text eingegeben –

+0

@Shah Das ist auch in der verknüpften Dokumentation enthalten. Setzen Sie die 'CausesValidation'-Eigenschaft Ihres" Exit "-Buttons (und aller anderen Steuerelemente, die Sie wünschen) auf" true ", so dass das Klicken auf die" Validating "- oder" Validated "-Ereignisse nicht ausgelöst wird. –