Nicht mit Controls rechnen?

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Nicht mit Controls rechnen?

    Hallo Zusammen,
    ich habe zuletzt in einem Forum gelesen, dass man bei Berechnungen (Beispiel Taschenrechner) nicht mit den Controls (Bsp. TextBox) rechnen sollte.
    Dies sei schlechter Code und fehleranfällig.
    - Stimmt diese Aussage?
    -- Falls ja, was genau ist damit gemeint?

    Bedeutet das evtl., dass alles in Funktionen und Variablen ausgelagert werden soll?

    Nicht so?:

    VB.NET-Quellcode

    1. Private Sub cmd5_Click(sender As Object, e As EventArgs) Handles cmd5.Click
    2. If TextBox1.Text = "0" Then
    3. TextBox1.Text = ""
    4. End If
    5. TextBox1.Text += cmd5.Text
    6. End Sub


    Sondern so?:

    VB.NET-Quellcode

    1. Private Sub cmd5_Click(sender As Object, e As EventArgs) Handles cmd5.Click
    2. Dim TempVariable As Double
    3. TempVariable = CDbl(TextBox1.Text)
    4. If TempVariable = 0 Then
    5. TempVariable = 0D
    6. End If
    7. TempVariable += 5
    8. Ausgabe(TempVariable)
    9. End Sub
    10. Private Sub Ausgabe(ByVal VariableZumAnzeigen As Double)
    11. TextBox1.Text = CType(VariableZumAnzeigen, String)
    12. End Sub


    LG Carsten
    Das ist mir neu, sehe auch keine Fehleranfälligkeit. Btw:

    VB.NET-Quellcode

    1. VariableZumAnzeigen.ToString
    ist einfacher und schöner als

    VB.NET-Quellcode

    1. CType(VariableZumAnzeigen, String)
    .

    nny16234 schrieb:

    - Stimmt diese Aussage?


    Ja und nein. Denn Controls repräsentieren ja keine Zahlen, sie dienen zur Anzeige von Daten und auch dazu dem User die möglichkeit zu geben Eingaben zu machen, mit anderen Worten man kann so gesehen garnicht mit Controls rechnen. Usereingaben werden soweit immer an Variable "übergeben" wie auch validiert.

    Steht z.B. in TextBox1 "ABC" und in TextBox2 steht "123", nun nrechne du mal ABC+123, bzw. teste das mal und schau was passiert. "ABC" als String kann nicht in eine Integer konvertiert werden, der String "123" allerdings schon, dafür gibt es die Funktionen wie Integer.Parse bzw. Integer.TryParse, natürlich auch für andere numerische Datentypen. Validierst du die Daten, kannst du verhindern das es zum Absturz des Programms kommt, was immer eine der ersten Prioritäten sein soll. Schalte auch Option Strict On, denann bemängelt die IDE auch Fehlerhaften Code, also wenn Implizierte Convertierungen vorgenommen werden(String + Integer, Byte * Double etc..). Ach das gibst noch so viel mehr...

    Lade dir diese Buch runter und schau mal durch:
    microsoft.com/germany/visualst…how.aspx?id=msdn_de_49057

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If Integer.TryParse(TextBox1.Text, wertA) AndAlso Integer.TryParse(TextBox2.Text, wertB) Then
    3. Dim wertC As Integer = wertA + wertB
    4. MessageBox.Show(wertC.ToString)
    5. Else
    6. MessageBox.Show("Ungültige Eingaben!")
    7. End If
    8. End Sub

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Murdock“ ()

    radio-ffk schrieb:

    Das ist mir neu, sehe auch keine Fehleranfälligkeit. Btw:

    VB.NET-Quellcode

    1. VariableZumAnzeigen.ToString
    ist einfacher und schöner als

    VB.NET-Quellcode

    1. CType(VariableZumAnzeigen, String)
    .


    Danke für den Tipp, darauf habe ich nicht geachtet, da ich im Verlauf des Programmes den CType mit der Überprüfung of Nothing abfangen wollte.... Aber,
    Eine Variable von Ursprungstyp in ein String zu konvertieren, wird meiner Ansicht nach keinerlei Fehler verursachen, wenn der Compiler keinen Fehler macht. Destotrotz,
    Ist man mit .TryParse auf der sicheren Seite und um konsistenten & kontinuierlichen Code zu schreiben, werde ich String.TryParse verwenden

    Ein Zitat aus StackOverflow:
    Convert.ToDouble will throw an exception on non-numbers
    Double.Parse will throw an exception on non-numbers or null
    Double.TryParse will return false or 0 on any of the above without generating an exception.


    Murdock schrieb:


    Lade dir diese Buch runter und schau mal durch:
    microsoft.com/germany/visualst…how.aspx?id=msdn_de_49057

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If Integer.TryParse(TextBox1.Text, wertA) AndAlso Integer.TryParse(TextBox2.Text, wertB) Then
    3. Dim wertC As Integer = wertA + wertB
    4. MessageBox.Show(wertC.ToString)
    5. Else
    6. MessageBox.Show("Ungültige Eingaben!")
    7. End If
    8. End Sub



    Danke sehr! Damit wird es etwas verständlicher.
    Stell dir vor, du bist im Matheunterricht und hast auf dem Blatt zwei Zahlen stehen, die addiert werden sollen.
    Du rechnest ja nicht Blatt-Kästchen2 + Blatt-Kästchen3, sondern du rechnest mit den zwei Zahlen und schreibst sie auf das Papier, damit sie jeder sieht.

    Beim Programmieren stehen die Zahlen für den Programmierer in Variablen, rechner daher mit den Variablen und nutze die Controls nur, um sie anzuzeigen.

    nny16234 schrieb:

    - Stimmt diese Aussage?
    -- Falls ja, was genau ist damit gemeint?
    Ja, es stimmt.
    Controls haben meist eine Text-Property, die gern von Anfängern als Wert-Eigenschaft missbraucht wird (im Gegensatz zur Value-Property von z.B. NumericUpDown).
    Gerechnet wird mit Variablen, die heißen z.B. x und y und sind z.B. vom Typ Double, da wird genau so gerechnet, wie Du es in der Schule bei Gleichungen mit n Unbekannten gelernt hast.
    Diese Unbekannten sind eben nicht vom Typ String, sondern je nach Problem vom Typ Integer, Double usw.
    Wenn Du dann ein ergebnis berechnet hast, weist Du das Resultat der Text-Property eines Controls zu, vermöge der Formatierung mit .ToString.
    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!