Textbox Integerwert

  • VB.NET

Es gibt 23 Antworten in diesem Thema. Der letzte Beitrag () ist von Manschula.

    Textbox Integerwert

    Z.B.
    If Textbox1.text < textbox2.text Then
    Msgbox(Textbox1.text & " ist kleiner als " textbox2.text)
    End if

    Es werden in die Textbox Zahlen eingegeben (auch Decimal) und ich möchte das richtige Ergebnis. Mit dem COde hier klappts nicht...
    Mit Strings sollte man nicht rechnen.
    Wandle jeden Text in eine Zahl um:

    VB.NET-Quellcode

    1. MsgBox(CInt(Text1.text) < CDbl(Text2.text))


    Gibt true oder false aus.

    Statt CInt kann man auch Val()), CType(?, Double) oder anderes verwenden. :thumbup:

    VB.NET-Quellcode

    1. If MsgBox(CDec(TextBox1.Text) < CDec(TextBox2.Text)) Then
    2. MsgBox(TextBox1.Text & " ist größer als " & TextBox2.Text)
    3. End If

    Wieso bekomme ich erst eine Msgbox mit "True" und dann erst MsgBox(TextBox1.Text & " ist kleiner als " & TextBox2.Text)
    Habe ich ja nicht vorgegeben

    VB.NET-Quellcode

    1. MsgBox(CDec(TextBox1.Text) < CDec(TextBox2.Text))


    Zeigt eine Textbox an ^^

    VB.NET-Quellcode

    1. If CDec(TextBox1.Text) < CDec(TextBox2.Text) Then
    2. MsgBox(TextBox1.Text & " ist größer als " & TextBox2.Text)
    3. End If
    OFFTOPIC:
    Einmal wusste einer im Forum nicht mal, was Val() ist

    Liegt vielleicht daran, dass Val im Microsoft.VisualBasic-Namespace zu finden ist. Das ist der Platz, wo solche Funktionen wie ltrim, int, msgbox,... usw auftauchen. Dies sind Elemente, die in der Vergangenheit benutzt wurden, und welche auch heute noch durch eben diesen Namespace funktionieren. Das sind auch die Funktionen, bei denen ein Teil der User dann z.B. sagt: "msgbox ist veraltet, nimm Messagebox.Show" Wenn man, wie viele hier - auch ich - von Quick-Basic über VB6 hierher kommt, ist man eben gewohnt, gewisse Funktionen zu benutzen, auch wenn es inzwischen wesentlich kraftvollere Möglichkeiten dafür gibt. (Bei vielen Lehrern ist es so, und die geben das nunmal so weiter, wie selbst gelernt.) Wenn die Macher von VB standardmäßig Option Strict auf On setzen würden, und den Microsoft-VisualBasic-Namespace deaktivieren (nicht löschen!), dann hätten wir hier eine andere Art der Programmierung...


    @SenA: Rat für die nächsten Wochen: Option Strict auf ON setzen. Es werden sehr viele Zeilen in deinen Programmen unterstrichen werden. Und dann diese Daten ins richtige Format konvertieren. Wenn du die Konvertierung der Datentypen büffelst, werden - glaube ich - einige Lichter aufgehen... Es ist zwar ein anstrengender Weg, aber der Richtige.. ;)

    VB.NET-Quellcode

    1. Dim f As String = "4" 'Versuche alternativ "4.32"
    2. Dim i As Integer
    3. Try
    4. i = Convert.ToInt32(f)
    5. Catch ex As Exception
    6. i = Nothing
    7. End Try
    8. If i = Nothing Then
    9. MessageBox.Show("Es wurde kein gültiger Integer-Wert eingegeben")
    10. Else
    11. MsgBox(i.ToString)
    12. End If
    Was macht MessageBox.Show() so viel kraftvoller als MsgBox()?

    Die neue Messagebox hat einfach mehr Einstellungsmöglichkeiten, zB. inklusive Angabe des Ownerfenster, einem Helpfilepath, den MessageBoxOptions ...
    Der Begriff "kraftvoller" bezog sich auf die neuen Funktionen insgesamt, welche die alten ersetzen.

    Ich selbst verwende zu schnellen Anzeigen eines Wertes auch noch Msgbox, weil es einfach schneller geschrieben ist.
    ABER!!!!: in allen anderen Fällen wird ausnahmslos die neue Messagebox-Klasse verwendet.

    BTW: der Umstieg auf C# wäre ziemlich witzig, wenn man oft den VisualBasic-Namespace nutzt...
    Die Konvertierung von String in Integer wird weder mit Val(), noch mit CInt(), noch mit Convert.ToInt32(), noch mit CType() noch mit DirectCast() noch mit TryCast() erledigt, auch nicht in einem Try-Block. Die korrekte Methode ist [Zieldatentyp].[Try]Parse(str, ByRef val). Warum? Die direkte Konvertierung von String in Int32 ist schlechter Stil, da die Konvertierungsmethoden und -Operatoren dafür gedacht sind, gleichartige Typen ineinander zu casten, nicht völlig verschiedene. Das Typcasting ist dafür gut, z.B. eine Subklassenreferenz in eine Basisklassenreferenz umzuwandeln oder um den Wertebereich eines Integers in den eines Int64 zu erweitern, aber nicht um Äpfel in Birnen umzuwandeln.
    Gruß
    hal2000
    Ich hab bis jetzt noch nie diese Methode benutzt und alles hat normal funktioniert, ich finde, es ist egal, was man nimmt, Hauptsache, es funktioniert. :thumbdown:

    Außerdem, ist es viel kürzer, CInt() zu schreiben, als Integer.Parse()
    Int16 und Int32 ist ein großer Unterschied:
    Int16 = Short
    Int32 = Integer
    Int64 = Long

    es gibt ja noch Int16.Parse usw...mit Parse kannst du überprüfen, ob es auch wirklich zulässig ist und somit zuverlässig Konvertiert wurde(durch einen Error) stattdessen kann man direkt TryParse nehmen mit welchem man einen Boolschen Wert zurückbekommt...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---