Taschenrechner

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von DerNeuling.

    Taschenrechner

    Neu

    Guten Tag Leute,
    ich habe erst vor paar Tagen angefangen mit VB zu arbeiten, da ich durch die Schule
    "gezwungen" werde dies zu machen. Es macht mir ziemlich Spaß, aber manchmal komme ich
    echt nicht weiter.


    Ich habe mal auf der Seite nach dem Problem gesucht, aber es kamen gefühlt 50 Seiten und
    ich konnte mir nicht alles durchlesen. Einige Threads habe ich mir natürlich angeschaut, aber nichts
    zu meinem Problem gefunden.

    Ich muss einen Taschenrechner programmieren, mit 2 Textboxen.Eine freiwillige Aufgabe war es, dann
    noch einen Tastenblock zu erstellen. Da stoß ich leider an meine Grenzen. Ich bekomme es hin,dass er eine
    Zahl immer in die erste Textbox eingibt, aber egal was ich versuche, ich schaffe nicht ,dass er dann eine Zahl
    in die zweite Textbox eingibt.
    Also, wie schaffe ich es, dass wenn ich auf die zweite Textbox klicke und dann auf einen Nummerbutton, dass er
    auch die Zahl in die zweite Textbox die Nummer schreibt ?

    Ich bedanke mich im voraus :

    mal ein Bild, damit ihr es vielleicht besser versteht :


    P.S ; Ich weiß, dass es besser aussehen würde mit einer Textbox und dass es vielleicht auch
    einfacher wäre, aber es muss leider so sein.

    Neu

    Hi!

    Das Programm muss ja "wissen" welche TextBox jetzt gefüllt werden soll..deswegen nimmt man sich eine Variable und weist der die aktuell markierte TextBox zu!
    Dann, wenn ein Button im Tastenblock gedrückt wird weist man der Variablen den Zahlenwert zu!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private _selectedTextbox As TextBox = Nothing
    2. Private Sub TextBox1_Enter(sender As Object, e As EventArgs) Handles TextBox1.Enter
    3. _selectedTextbox = DirectCast(sender, TextBox)
    4. End Sub
    5. Private Sub TextBox2_Enter(sender As Object, e As EventArgs) Handles TextBox2.Enter
    6. _selectedTextbox = DirectCast(sender, TextBox)
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. _selectedTextbox.Text = _selectedTextbox.Text & "1"
    10. End Sub

    Neu

    Also ich hätts ja mit na Hilfsvariable gemacht:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim activeTextbox As Integer = 1
    2. Private Sub TextBox1_Click(sender As Object, e As EventArgs) Handles TextBox1.Click
    3. activeTextbox = 1
    4. End Sub
    5. Private Sub TextBox2_Click(sender As Object, e As EventArgs) Handles TextBox2.Click
    6. activeTextbox = 2
    7. End Sub
    8. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    9. Select Case activeTextbox
    10. Case 1
    11. TextBox1.Text &= "1"
    12. Case 2
    13. TextBox2.Text &= "1"
    14. Case Else
    15. End Select
    16. End Sub


    EDIT// ok @Morrison war schneller. Allerdings würde bei dir ja ne Exception kommen wenn man nicht vorher auf eine Textbox klickt.
    Also entweder legt man vorher eine Fest als Standard oder fängt halt die Exception ordentlich und sagt dem Nutzer er solle erst eine auswählen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Neu

    @Morrison Danke für deine Hilfe, ich habe es erstmal mit Chronik seinen Ratschlag versucht

    @xChRoNiKx habe es mal versucht wie du zu machen, aber er schreibt immer noch leider nur
    in die erste Textbox und wenn ich dann etwas in die zweite Textbox schreiben will, geht er wieder hoch.

    Erstmal die Zahl 1 :

    VB.NET-Quellcode

    1. Private Sub cmdZahl1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdZahl1.Click
    2. Dim activeTextbox As Integer = 1
    3. Select activeTextbox
    4. Case 1
    5. txtWert1.Text &= "1"
    6. Case 2
    7. txtWert2.Text &= "1"
    8. Case Else
    9. End Select
    10. End Sub


    Die Textbox 1 (die heißt bei mir txtWert1)

    VB.NET-Quellcode

    1. Private Sub txtWert1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWert1.TextChanged
    2. Dim activeTextbox As Integer = 1
    3. activeTextbox = 1
    4. End Sub


    Die Textbox 2 (die heißt bei mir txtWert2)

    VB.NET-Quellcode

    1. Private Sub txtWert2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtWert2.TextChanged
    2. Dim activeTextbox As Integer = 1
    3. activeTextbox = 2
    4. End Sub


    Vielen Dank für jede Mithilfe.
    Wie gesagt, bin echt neu in diesem Bereich.

    Neu

    Aaaalso,

    an sich ist Morrison sein Code sogar besser als meiner.

    Dein Problem besteht darin das du hier nicht richtig aufgepasst hast.
    Als erstes deklarierst du "activeTextbox" global innerhalb der Class Form1(oder wie auch immer die bei dir heißt).

    Spoiler anzeigen

    VB.NET-Quellcode

    1. ​Public Class Form1
    2. Private activeTextbox As Integer = 1


    Du deklarierst sie hier immer wieder neu innerhalb einer Methode das kann ja nicht funktionieren.
    Desweiteren verwendest du das Falsche Textbox Event.

    TextChanged wird immer aufgerufen wenn (wie der Name sagt) der Text in der Box geändert wird.
    Du möchtest ja das sobald jemand auf eine Textbox geklickt hat das dein Programm sich merkt welche das war beim nächsten Button Click.

    Also solltest du das Textbox Click Ereignis nehmen oder das Enter Ereignis das wäre egal weißt du wie das geht?
    Hoffe das war verständlich ausgedrückt.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    Neu

    Beachte den Unterschied zwischen Deinem Code und dem vorgeschlagenen. ActiveTextBox wird bei Dir lokal deklariert. Und dann wieder vergessen. Bei xChRoNiKxs Code ist er formweit - und somit wird auch der veränderte Wert beibehalten.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.