TabControl für Textboxeingabe sperren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von vg2000.

    TabControl für Textboxeingabe sperren

    Hallo ins Forum,

    folgende Situation.
    Habe ein tabControl mit mehreren Tabs.
    Die Tabs enthalten Textboxen, die ich auf korrekte Werte abfragen möchte.
    Z.B. Dürfen nur Zahlen eingegeben werden.

    Quellcode

    1. Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave
    2. Dim test As Integer = 0
    3. Try
    4. test = CInt(TextBox1.Text)
    5. Catch ex As Exception
    6. MsgBox("Bitte geben Sie einen korrekten Wert ein.")
    7. TextBox1.Focus()
    8. Exit Sub
    9. End Try
    10. End Sub


    Das funktioniert soweit korrekt.

    Jetzt meine Frage:

    Wenn man nun in die Textbox einen inkorrekten Wert eingibt, z.B. "abc" und dann per Maus den Tab wechselt, erscheint die Meldung der MsgBox mehrfach und der Tab wird dennoch gewechselt. Der Wert "abc" bleibt in der TextBox stehen, soll er aber nicht.

    Wie erstelle ich hier eine korrekte Wertabfrage in der Textbox?
    Vielen Dank für Eure Hilfe
    Nutze Integer.TryParse.

    Setzte doch einfach die Textbox auf String.Empty, wenn die Konvertierung fehlschlägt.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Hi,
    vielen Dank.
    String.Empty ist schonmal prima. Danke.

    Quellcode

    1. Dim test As Integer = 0
    2. If Not Integer.TryParse(TextBox1.Text, test) Then
    3. MsgBox("Bitte geben Sie einen korrekten Wert ein.")
    4. TextBox1.Text = String.Empty
    5. TextBox1.Focus()
    6. Exit Sub
    7. End If


    Integer.Tryparse bringt allerdings keinen direkten Vorteil.
    Ich möchte verhindern, dass der Tab gewechselt werden kann, ohne dass ein vernünftiger Wert in der Textbox landet.
    Wie kann ich das absichern?

    Bin ich da grundsätzlich im "Leave"-Ereignis korrekt?

    Danke schonmal.

    vg2000 schrieb:

    und dann per Maus den Tab wechselt
    Schaue dir folgendes TabControl-Ereignis einml dazu an:

    VB.NET-Quellcode

    1. Private Sub DeinTabControl_Deselecting(sender As Object, e As TabControlCancelEventArgs) Handles DeinTabControl.Deselecting
    2. e.Cancel = True 'so kann man den Tabwechsel abbrechen...
    3. End Sub

    Integer.TryParse hilft Dir natürlich nicht bei Deinem Problem, ist jedoch "moderner".

    Wenn Du das wechseln von Tabs verhindern willst, dann bist Du wohl beim TextBox.Leave-Event nicht richtig. Was wäre denn naheliegend in Deinen Augen?

    @VB1963 Cool, dass Du es ihm so einfach hinwirfst. :thumbdown:
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich denke, der TE wäre mit etwas Hilfe schon draufgekommen und hätte noch ein bisschen Erfahrung sammeln können, aber Du hast recht. Sobald es in einem Ratespiel endet, sollte man eingreifen. Jedoch vorher mal testen, was der TE so selbst erarbeiten kann.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    vg2000 schrieb:

    die ich auf korrekte Werte abfragen möchte.
    Mach Dir eine Integer-TextBox, die nur Tastendrücke 0-9, Del und Cursorbewegungen zulässt. Findest Du hier im Forum.
    Oder nimm ein NumericUpDown.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!