IsNumeric: Datentyp des Arguments

  • VB.NET

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

    IsNumeric: Datentyp des Arguments

    Hallo,

    bei meinen Programmen muss ich oft überprüfen ob Eingaben in Textfelder Zahlen sind und andere Bedingungen erfüllen, zB größer 0 sind.

    Normalerweise mache ich das ja mit

    VB.NET-Quellcode

    1. if Isnumeric(Textbox.text) and Textbox.text >0 then....


    Da ich jetzt ein Programm habe wo ich relativ viele Eingabewerte überprüfen muss und der Code nicht zu lang und unübersichtlich werden soll hatte ich überlegt diese Überprüfungen in eine separate Funktion auszulagern, damit ich für jedes Textfeld diese nur einmal aufrufen muss:

    VB.NET-Quellcode

    1. function TextboxKontrolle(Text as string) as Boolean
    2. if isnumeric(Text) and Text >0 then
    3. TextboxKontrolle = true
    4. else
    5. TextboxKontrolle = false
    6. endif
    7. end function


    aufrufen würde man das dann im Hauptprogramm mit

    VB.NET-Quellcode

    1. if TextboxKontrolle (Textbox.text) then ....


    Jetzt zu meiner Frage: Welchen Datentyp muss das Argument Text meiner Funktion haben (im Beispiel habe ich es als String gemacht), damit es von isNumeric korrekt ausgeführt wird bzw. anders gefragt welches Datentyp braucht isnumeric als Parameter? Oder kann ich das als string lassen? Sollte auch für Double, also Zahlen mit ANchkommastellen funktionieren, wobei es das tut wenn ich es direkt im Hauptprogramm amche.

    Vielen Dank im voraus
    Auch wenn es Deine Frage nicht beantwortet: Falsche Herangehensweise. Schaust Du hier: Visual Studio - Empfohlene Einstellungen
    Verwende Stattdessen:

    VB.NET-Quellcode

    1. Dim FinalValue As Double = 0
    2. Textboxkontrolle = Double.TryParse(Text, FinalValue) AndAlso FinalValue > 0
    Da wird dann sauber ein Text in eine "Double-Zahl" umgewandelt.

    ##########

    Du könntest auch Textboxen übergeben und die Funktion namentlich so gestalten, dass man weiß, was sie macht:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If TextboxContainsPositiveNumber(TextBox1) Then MessageBox.Show("Yeah, positiv!")
    3. End Sub
    4. Private Function TextboxContainsPositiveNumber(TextBox As TextBox) As Boolean
    5. If TextBox Is Nothing Then Return False
    6. Dim FinalValue As Double = 0
    7. Return Double.TryParse(TextBox.Text, FinalValue) AndAlso FinalValue > 0
    8. End Function

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    Habe es jetzt so lösen können:

    VB.NET-Quellcode

    1. Public Function KontrolleTextbox(Textbox As Object) As Boolean
    2. Dim Rückgabe As Boolean = False
    3. If Textbox.text <> "" Then
    4. If IsNumeric(Textbox.text) = True Then
    5. If Textbox.text > 0 Then
    6. Rückgabe = True
    7. End If
    8. End If
    9. End If
    10. KontrolleTextbox = Rückgabe
    11. End Function


    Beim Aufruf muss ich jetzt nur noch die Textbox selber angeben:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. MsgBox(KontrolleTextbox(TextBox1))
    3. End Sub



    Funktioniert super
    Sobald Du auf Option Strict On schaltest - und das solltest Du eher früher als später machen -, Du den VB6-Namespace rausnimmst und versehentlich ein anderes Objekt als eine TextBox übergibst, hat sich das mit super funktionieren erledigt. Aber: Jeder ist für seinen Code verantwortlich. Von daher: Wenn es läuft, ist das Thema wohl erledigt und der Thread als solcher markierbar.
    btw: If IsNumeric(Textbox.text) = True Then: Vergleiche mit Booleanwerte sind unnötig. Es reicht auch If IsNumeric(Textbox.text) Then
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Den Code ist extrem dirty. was passiert wenn ich -1 die TextBox eintrage? Zudem würde das reichen: Return IsNumeric(Textbox.text) Denn hier wird bereits ein Boolean zurück gegeben.

    Mach doch gleich statt
    Function KontrolleTextbox(Textbox As Object)
    Lieber so:
    Function KontrolleTextbox(Textbox As TextBox)
    oder
    Function KontrolleTextbox(ZuPrüfenderWert As String)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    mrMo schrieb:

    was passiert wenn ich -1 die TextBox eintrage?
    Dann würde False zurückgegeben werden, da der Rückgabewert so initialisiert wurde. Dein Vorschlag mit Return IsNumeric(Textbox.text) reicht nicht. Er will ja, dass nur positive Zahlen akzeptiert werden.
    Ups. Ich antworte für andere.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Achso, hab die Einschränkung auf positive Zahlen überlesen ;)
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    harmenrabb schrieb:

    bei meinen Programmen muss ich oft überprüfen ob Eingaben in Textfelder Zahlen sind und andere Bedingungen erfüllen, zB größer 0 sind
    Warum nimmst du nicht gleich ein NumericUpDown-Control.
    Da musst du nichts mehr prüfen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    harmenrabb schrieb:

    VB.NET-Quellcode

    1. If Textbox.text > 0 Then
    Was ist, wenn in der TextBox "Roulade mit Klößen" drinne steht :?:
    Mehr als einen Kloß oder mehr als eine Roulade :?:
    Oder gar mehr als ein Object :?:
    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!