Addition von Zahlen mit textbox und Button

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

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Visual_Prog.

    Addition von Zahlen mit textbox und Button

    Eine Textbox und ein Button sind vorhanden.

    In der Textbox wird eine zahl eingetragen.

    Was soll passieren?

    Durch den Button.click soll die zahl irgendwo gespeichert werden. (Übersetzung in integer selbstverstaendlich).
    Dann wird eine neue zahl in der textbox eingetragen. Durch den Button.click soll die neue zahl der alten in diesem Irgendwo addiert werden.

    So dann jedes Mal bei einer neu eingetragenen Zahl.
    hat jemand eine Idee?
    Du hast doch schon genau beschrieben was passieren soll. Was benötigst du jetzt von uns?
    Einfach das Geschriebene in Code umsetzten.

    Beim klicken wird auf die Zahl(Integer) die Zahl aus dem Textfeld addiert.
    Die Zahl(Integer) wird beim starten der Form mit 0 Initialisiert.

    Wenn du jetzt noch anstelle der TextBox ein Numeric nimmst ist alles Super :)
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Hi,

    was @Schamash meint ist, das Du erstmal anstelle einer Textbox ein NumericUpDown nehmen sollst, das erspart Dir schon einmal die Fehlerbehandlung, denn dort kannst Du nur Zahlen eingeben.
    Außerdem sollte man mit Textboxen nicht rechnen, die sind für Strings vorgesehen.

    Zum Zwischenspeichern deklarierst Du außerhalb des Button eine Variable vom Typ integer und gibst ihr den Startwert 0 mit (kannst Du alles in der Deklaration machen).
    dann addierst Du zu deiner Variablen die Variable selbst hinzu und den Value des NumericUpDown....
    "Hier könnte Ihre Werbung stehen..."
    Textbox lässt alle eingaben zu ein NummericUpDown lässt ausschließlich eingaben im Zahlenvormat zu.

    VB.NET-Quellcode

    1. Dim Zahl As Integer = 0
    2. Public Sub Addieren()
    3. 'kann auch im Buttonklick stehen
    4. Dim zwischenwert As Integer
    5. If Integer.TryParse(text.Text, zwischenwert) Then
    6. Zahl += zwischenwert 'da in einer Textbox aber auch "abc" stehen kann ist hier eine mögliche Fehlerquelle
    7. End If
    8. End Sub


    edit: Habe den Code etwas "fehlersicherer" gemacht
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."

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

    ich verwsuchs jetzt mit einem numericupdown

    VB.NET-Quellcode

    1. Public Sub Addieren()
    2. 'kann auch im Buttonklick stehen
    3. Dim zwischenwert As Integer
    4. If Integer.TryParse(NumericUpDown1.text, zwischenwert) Then
    5. Zahl += zwischenwert 'da in einer Textbox aber auch "abc" stehen kann ist hier eine mögliche Fehlerquelle
    6. End If
    7. End Sub


    bloss das hat ja keinen text, was kommt dann da rein?
    Das hat eine Value. Da musst Du nix konvertieren.

    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 :!:
    okay ich ba das endlich mal gelöst(jetzt nochmal alles im Detial)

    Es sind zwei Numericupdown vorhanden, um Werte einzugeben.
    Um die einzelnen Werte nachher verfolgen zu koennen, werden diese in eine Listbox eingetragen.

    Fuer die Summe werdenn dann einfach die Numericupdown.value als decimalvariblen deklariert.
    Diese werden dann fuer das Summerergebnis in einem Label zusammengetragen.

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click)
    2. Dim zwischenwert As Decimal
    3. Dim zwischenwert1 As Decimal
    4. Dim ergebnis As Decimal
    5. LB_1.Items.Add(NumericUpDown1.Value)
    6. LB_1.Items.Add(NumericUpDown2.Value)
    7. zwischenwert = NumericUpDown1.Value
    8. zwischenwert1 = NumericUpDown2.Value
    9. ergebnis = zwischenwert + zwischenwert1
    10. Label1.Text = CStr(ergebnis)
    11. End Sub


    Um eine Summe von bis zu 8 items zu gewährleisten, werde ich 8 numericupdowns erstellen und um platz zu sparen und um uebersichtlich zu sein, diese dann mit bringtofront an den vordergrund bringen bzw in den Hintergrund.
    ist bestimmt umstaendlich, aber ne loesung : D
    Wenn ich mich mal einschalten darf: Vergiss diese CStr-Funktion gleich wieder, denn die ist unnötig. Jedes Object besitzt eine ToString-Funktion, da Object diese mitliefert. Außerdem bietet die ToString-Funktion bei bestimmten Datentypen nützliche Überladungen, das solltest du dir merken ;)
    Also wäre die Zeile einfach

    VB.NET-Quellcode

    1. ​Label1.Text = ergebnis

    oder falls du die ergebnis-Variable ansonsten nicht brauchst, könnte man noch etwas kürzen:

    VB.NET-Quellcode

    1. ​Dim zwischenwert As Decimal
    2. Dim zwischenwert1 As Decimal
    3. LB_1.Items.Add(NumericUpDown1.Value)
    4. LB_1.Items.Add(NumericUpDown2.Value)
    5. zwischenwert = NumericUpDown1.Value
    6. zwischenwert1 = NumericUpDown2.Value
    7. Label1.Text = (zwischenwert1 + zwischenwert2).ToString

    Ansonsten ist der Code ok, ich würde lediglich den Controls noch aussagekräftige Namen geben und eventuell die ergebnis-Variable klassenweit definieren, dann kannst du mit der später noch rumrechnen.

    LG
    Evtl günstiger wäre, du würdest die Werte in eine List(Of Decimal ). Dann brauchst du evtl. auch nur ein NumericUpdown.
    Kannste ja iwie so machen, dass bei ButtonClick der aktuelle NumUd-Wert in die List(Of Decimal) kommt, und der User kann dann im selben(!) NumUd den nächsten Wert eingeben.

    Eine Liste(Of Decimal) aufzusummieren ist ein einziger Befehl:

    VB.NET-Quellcode

    1. dim ergebnis=myList.Sum()
    Also ich hab auf meiner Form mal zum Test
    1. Nen NumericUpDown
    2. Nen Label (rechts daneben)
    3. Ne ListBox (darunter)
    4. Nen Button
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim _sum As New List(Of Decimal)
    3. Private Sub NumericUpDown1_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles NumericUpDown1.KeyDown
    4. 'Auf Enter reagieren
    5. If e.KeyCode = Keys.Enter Then
    6. _sum.Add(NumericUpDown1.Value) 'Neuen Wert in Liste hinzufügen
    7. NumericUpDown1.Value = 0 'Eingabefeld zurücksetzen
    8. NumericUpDown1.Select(0, 1) 'Die eingetragene 0 markieren, sodass die nicht immer gelöscht werden muss
    9. Label1.Text = String.Concat(" = ", _sum.Sum.ToString("n")) 'Die Summe im Label anzeigen
    10. ListBox1.DataSource = Nothing 'Zurücksetzen der Listboxwerte
    11. ListBox1.DataSource = _sum 'Neu füllen der Listbox
    12. End If
    13. End Sub
    14. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    15. _sum.Clear() 'Liste leeren
    16. ListBox1.DataSource = Nothing 'Listbox leeren
    17. Label1.Text = "" 'Label leeren
    18. End Sub
    19. Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    20. Button1.Text = "Reset" 'Button beschriften
    21. NumericUpDown1.Minimum = -99999999999 'Eingabeminimum setzen
    22. NumericUpDown1.Maximum = 99999999999 'Eingabemaximum setzen
    23. NumericUpDown1.RightToLeft = Windows.Forms.RightToLeft.Yes 'Ist ne Zahl also rechtsbündig
    24. ListBox1.FormatString = "n" 'Werte als Kommazahl darstellen lassen
    25. ListBox1.RightToLeft = Windows.Forms.RightToLeft.Yes 'Sind auch Zahlen also auch rechtsbündig
    26. End Sub
    27. End Class


    Das Form Load kannst natürlich auch im Designer machen. Aber so wars anschaulicher was ich getan hab.
    In dem Eingabefeld kannst nun einfach ne Zahl eingeben und Enter drücken.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Visual_Prog schrieb:


    so in etwa?
    in etwaahaa. Natürlich muss die Liste als klassenvariable instanziert werden, lokal verfällt sie ja sofort, nachdem die Methode durch ist

    VB.NET-Quellcode

    1. Private summe_ As New List(Of Decimal)
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. summe_.Add(Nu_Mo1.Value) --> hier steht allerdings, es wird verwendet bevor ein wert zugewiesen wird.
    4. dim ergebnis = mylist.sum()
    5. End Sub

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. TB.SelectAll()
    3. LB.Items.Add(Nu_Mo1.Value)
    4. End Sub

    Warum wird beim Buttonclick die Textbox NICHT slektiert?

    VB.NET-Quellcode

    1. Private Sub TB_KeyDown(sender As Object, e As KeyEventArgs) Handles TB_Add.KeyDown
    2. If e.KeyCode = Keys.Enter Then
    3. Button1.PerformClick()
    4. TB_.SelectAll()
    5. End If
    6. End Sub

    Wenn ich die uebertragung des Textboxtestes auf die listbox mit Enter durchfuehre, klappt die uebertragung in die Liste, auch das markieren des Textboxtextes funktioniert, nur:
    dann entsteht so ein super nerviges Geraeusch. kann man das wegkriegen?
    Oder bleibt dann nur das ändern von TB_.SelectAll() in Textbox.text = "" ?

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. TB.Select()
    3. LB.Items.Add(Nu_Mo1.Value)
    4. End Sub


    Zur anderen Frage: Willst du es selbst herausfinden?
    Dann guck dir im ObjectBrowser mal die KeyEventArgs-Klasse an - die hat einen Member, mit dem man etwas unterdrücken kann (engl: "Suppress") ;)

    VB.NET-Quellcode

    1. Private Sub Nu_Mo1_KeyDown(sender As Object, e As KeyEventArgs) Handles Nu_Add.KeyDown
    2. If e.KeyCode = Keys.Enter Then
    3. Button1.PerformClick()
    4. e.supresskeypress = True
    5. End If
    6. End Sub


    Ist es das hier? Wird bei mir unterstrichen weil kein member von Keyeventargs : /
    ok jetzt klappts : )

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