Rechner (+,-,*,/)

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

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

      Rechner (+,-,*,/)

      Hallo liebe Com,

      [ÜBERARBEEITUNG FOLGT!]
      Ich habe grade meinen Rechner fertiggestellt und wollte hier mal eben Kurz den Sourcecode posten.

      Benötigt wird:
      - 3 Textboxen
      - 2 Labels
      - 1 Button

      -------------------

      Also ich habe das so gelöst das in der 3en Textbox das Operationszeichen steht z.B(+,-,*,/).
      Also Schrieb ich 4 Private Functions
      1ne für jede Operation also Plus,Minus usw..

      VB.NET-Quellcode

      1. Private Function Plus()
      2. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      3. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      4. Label3.Text = (CInt(TextBox1.Text) + CInt(TextBox2.Text)).ToString()
      5. Else
      6. MessageBox.Show("Ungültiges zeichen oder zahl!")
      7. End If
      8. Else
      9. MessageBox.Show("Leere Textboxen!!")
      10. End If
      11. End Function
      12. Private Function Minus()
      13. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      14. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      15. Label3.Text = (CInt(TextBox1.Text) - CInt(TextBox2.Text)).ToString()
      16. Else
      17. MessageBox.Show("Ungültiges zeichen oder zahl!")
      18. End If
      19. Else
      20. MessageBox.Show("Leere Textboxen!!")
      21. End If
      22. End Function
      23. Private Function Mal()
      24. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      25. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      26. Label3.Text = (CInt(TextBox1.Text) * CInt(TextBox2.Text)).ToString()
      27. Else
      28. MessageBox.Show("Ungültiges zeichen oder zahl!")
      29. End If
      30. Else
      31. MessageBox.Show("Leere Textboxen!!")
      32. End If
      33. End Function
      34. Private Function Geteilt()
      35. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      36. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      37. Label3.Text = (CInt(TextBox1.Text) / CInt(TextBox2.Text)).ToString()
      38. Else
      39. MessageBox.Show("Ungültiges zeichen oder zahl!")
      40. End If
      41. Else
      42. MessageBox.Show("Leere Textboxen!!")
      43. End If
      44. End Function


      Dann wollte ich es üpber eine If abfrage prüfen lassen doch dann bekamm ich die idee es über Select Case zu machen.
      Also:

      VB.NET-Quellcode

      1. Select Case TextBox3.Text
      2. Case "+"
      3. Plus()
      4. Case "-"
      5. Minus()
      6. Case "*"
      7. Mal()
      8. Case "/"
      9. Geteilt()
      10. End Select


      Im großen und ganzen sieht das dann so aus:

      VB.NET-Quellcode

      1. Option Strict Off
      2. Public Class Form1
      3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      4. End Sub
      5. Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button1.Click
      6. 'If TextBox3.Text = "+" Then
      7. ' Plus()
      8. 'End If
      9. 'If TextBox3.Text = "-" Then
      10. ' Minus()
      11. 'End If ***Unsauber***
      12. 'If TextBox3.Text = "*" Then
      13. ' Mal()
      14. 'End If
      15. 'If TextBox3.Text = "/" Then
      16. ' Geteilt()
      17. 'End If
      18. Select Case TextBox3.Text
      19. Case "+"
      20. Plus()
      21. Case "-"
      22. Minus()
      23. Case "*"
      24. Mal()
      25. Case "/"
      26. Geteilt()
      27. End Select
      28. End Sub
      29. Private Sub Label1_Click(sender As Object, e As EventArgs)
      30. End Sub
      31. Private Function Plus()
      32. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      33. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      34. Label3.Text = (CInt(TextBox1.Text) + CInt(TextBox2.Text)).ToString()
      35. Else
      36. MessageBox.Show("Ungültiges zeichen oder zahl!")
      37. End If
      38. Else
      39. MessageBox.Show("Leere Textboxen!!")
      40. End If
      41. End Function
      42. Private Function Minus()
      43. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      44. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      45. Label3.Text = (CInt(TextBox1.Text) - CInt(TextBox2.Text)).ToString()
      46. Else
      47. MessageBox.Show("Ungültiges zeichen oder zahl!")
      48. End If
      49. Else
      50. MessageBox.Show("Leere Textboxen!!")
      51. End If
      52. End Function
      53. Private Function Mal()
      54. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      55. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      56. Label3.Text = (CInt(TextBox1.Text) * CInt(TextBox2.Text)).ToString()
      57. Else
      58. MessageBox.Show("Ungültiges zeichen oder zahl!")
      59. End If
      60. Else
      61. MessageBox.Show("Leere Textboxen!!")
      62. End If
      63. End Function
      64. Private Function Geteilt()
      65. If TextBox1.Text <> "" And TextBox2.Text <> "" Then
      66. If IsNumeric(TextBox1.Text) And IsNumeric(TextBox2.Text) Then
      67. Label3.Text = (CInt(TextBox1.Text) / CInt(TextBox2.Text)).ToString()
      68. Else
      69. MessageBox.Show("Ungültiges zeichen oder zahl!")
      70. End If
      71. Else
      72. MessageBox.Show("Leere Textboxen!!")
      73. End If
      74. End Function
      75. Private Sub TextBox3_TextChanged(sender As Object, e As EventArgs) Handles TextBox3.TextChanged
      76. End Sub
      77. End Class


      Im Anschluss wollte ich das man nur Zahlen eingeben kann.
      Das machte ich dann so...

      VB.NET-Quellcode

      1. If TextBox1.Text <> "" And TextBox2.Text <> "" Then


      was soviel heißt wie: Ist der Inhalt der Textbox1 Größer oder kleiner als "" dann tuh eine Messagebox ausgeben.

      Hoffe es nützt jemanden.... ^^
      Hier gibt es nichts zusehen, bitte gehen sie weiter!

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

      Ich hab's mal freigeschaltet, obwohl es nicht zu empfehlen ist.
      Hast Du unsere Tipps von Deinem Thread denn gelesen? IsNumeric ist ein böse VB6-Funktion und CInt ist nicht grade die beste Variante. Besser wäre Integer.TryParse.

      programmier Freak schrieb:

      was soviel heißt wie: Ist der Inhalt der Textbox1 Größer oder kleiner als "" dann tuh eine Messagebox ausgeben.

      Größer oder kleiner bei Strings? Das bedeutet ungleich, also wenn der String nicht leer ist. Stattdessen wäre String.IsNullOrWhitespace hier die bessere Wahl.

      Überhaupt empfehle ich keine TextBoxen für sowas und wenn man wirklich ganze mathematische Ausdrücke haben möchte, dann sollte man etwas schreiben, das das wirklich so parsen kann, also mit Tokenizing etc. und auch viel mehr Ausdrücke. Ist auch viel sauberer als da mit Strings zu hantieren.
      Außerdem ist es natürlich etwas unvorteilhaft, wenn Du dann auch noch Labels bzw. Deine Controls in den Funktionen ansprichst, denn somit ist das zu stark individuell für Dich angepasst. Besser wäre dann noch eine spezielle Klasse. Die Control- und Funktionsnamen sind btw auch ein NoGo, hier solltest Du dringend englische Bezeichnungen verwenden und entsprechend auch die Guidelines betrachten.
      Hast auch noch 'nen leeren Handler drin und Option Strict Off sollte ganz schnell verschwinden, das geht gar nicht. ;)

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Hmm ok wenn ich aber Option Strickt On schreib Tauchen Plötlich Mehrere Warnungen und Dutzend Fehler auf...
      ich überarbeite das nochmal das schaffe ich heute nicht mehr kannst du den Thread bitte löschen Danke
      Hier gibt es nichts zusehen, bitte gehen sie weiter!
      Jo, das ist ja der Sinn von Option Strict On, dass Du es richtig machst und es gar nicht mehr erst falsch angehen kannst.
      Sicher, dass ich ihn löschen soll? Kannst ruhig schauen, dass Du das mal noch überarbeitest und dann würde ich es so oder so noch stehen lassen.

      Grüße
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Das ist auch an sich grausam. Schreib eine Textbox die nur Zahlen und Rechenoperatoren akzeptiert und dann einen Parser. Sie dir dazu die PostFix-Notation an (-> Google).

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!
      @programmier Freak Weshalb? Wenn du ein Anfänger bist - was du offensichtlich bist - dann gilt das natürlich nicht. Aber mit Typen sollte man arbeiten können. Und ich denke wenn du da einfach mal optimistisch an einen ExpressionParser rangehst, dann lernst du mehr als so.

      Grüße
      "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

      Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!