Prüfen auf verlassen einer textbox

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Prüfen auf verlassen einer textbox

    Guten Morgen,

    Ich hab ein Problem und zwar muss ich irgendwie abprüfen ob ich gerade in der Textbox war, oder ob sie durch eine Funktion aufgerufen wird.

    Hier die Sub zur Textbox:

    VB.NET-Quellcode

    1. Private Sub txt_std_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txt_std.Leave
    2. If [Abprüfung auf verlassen der Textbox] = true Then
    3. If IsNumeric(txt_std.Text) = False Then
    4. MessageBox.Show("Bitte tragen Sie Nummerische Werte in die Textboxen ein.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error)
    5. txt_std.Text = ""
    6. txt_std.Select()
    7. End If
    8. End If
    9. End Sub


    Das Problem ist, dass die Textbox auch noch von einer weiteren Funktion aufgerufen wird. Diese Funktion leert alle Textboxen danach wieder und sieht folgendermaßen aus:

    VB.NET-Quellcode

    1. Private Sub stop_her()
    2. For Each ctrl As Control In Me.Controls
    3. If TypeOf ctrl Is TextBox Then
    4. ctrl.Visible = True
    5. ctrl.Text = ""
    6. End If
    7. Next
    8. End Sub


    Mein Problem ist jetzt das nach Abbrechen des Herunterfahrens die Messagebox auch aufgerufen wird, das ja in den Textboxen was geschrieben ist und des dann gelöscht wird und die Textboxen dabei ja dann auch verlassen werden. Dann findet das obere Event statt, in den Textboxen steht nichts drin und ich bekomme die Fehlermeldung auf den Bildschrim.

    Gruß Dieter__
    Nutze hierzu die Events GotFocus() und LostFocus() über den sender bekommst du das Control heraus und stetzt z.B. die Tag-Eigenschaft auf True und beim LostFocus() wieder auf False.
    Im TextChange Event prüfst du dann ob die Tag-Eigenschaft True ist, wenn ja hat die Textbox den Focus und die MsgBox würde erscheinen, ansonsten nicht.

    ggf. hat das Textbox Control auch eine Eigenschaft wie HasFocus oder IsFocused aber hierzu konnte ich in MSDN nichts finden auf die schnelle.

    Aber allgemein würde ich es eh anders lösen und schon bei der Eingabe NUR Nummerische Werte zulassen. Hierzu gibts auch einige Threads die nur Zahlen (ggf. Punkt oder Komma) zulassen.
    Damit bräuchtest du keine MsgBox, was auf dauer nerven würde.

    Edit: hier z.B. ein Thread dazu [VB 2010] Nur Zahlen in einer Textbox zu lassen
    Okey das mit dem Abrechen konnte ich nun mit den Events GotFocus() und LostFocus() erledigen.
    Aber leider hat sich hier dann gleich mein nächstes Problem gezeugt. Es gibt drei Textboxen. Wenn ich nun in die erste eine Zahl reinschreibe, es wird überprüft und kommt keine Fehlermeldung und es geht zur zweiten über. Hier schreib ich dann jetzt einen Buchstabe rein. Es kommt die Fehlermeldung, aber es wird sofort das GotFocus()-Event der ersten Textbox ausgeführt, obwohl in die nichts geschrieben wird.

    Ich komme nicht dahinter, warum das ausgeführt wird, obwohl ich in das nichts mehr reinschreibe.

    EDIT: Eigene Dummheit von mir. Hab mich 2 Mal vertippt. Funktioniert nun alles.
    Danke für die schnelle Hilfe ;)

    Gruß Dieter__

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Dieter__“ ()