1 Textbox mit 1 ComboBox Multiplizieren und Ergebnis in 3. Textbox

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von thommy1972de.

    1 Textbox mit 1 ComboBox Multiplizieren und Ergebnis in 3. Textbox

    Also ich habe
    a) 1 Comboxbox mit der Anzahl (1-100)
    b) TextBox mit einem Preis (soll Formatiert sein, was auch noch nicht so will)
    c) TextBox die das Ergebniss aus der Multiplikation aus a * b im Format 1.00 € ausgeben soll

    Folgender Code

    Quellcode

    1. Dim anzahl1 As String = Val(anz1.SelectedItem.ToString)
    2. Dim verkauf1 As String = Val(vk1.text)
    3. Dim summe1 As Double = Format(CDbl(anzahl1) * CDbl(vk1.Text), "#,##.00")
    4. total1.Text = Format(summe1, "#,##.00")


    Derzeit rechnet er mir in TextBox3 bei eingabe von 11.55 in TextBox3 1.155,00 aus ?? und bei der Eingabe von TextBox B kann ich kein Format auswählen da er bei der Umwandlung Fehlermeldung bringt wegen Convertierung.
    Gibt es eine Möglichkeit zumindest beide Textboxen als 0.00 ( oder 11.00 € oder 44.58 €) anzuzeigen ?
    Und was ist an der Berechnung (11.55 * 1 = 1.155,00) falsch ??


    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „thommy1972de“ ()

    Es gibt schon Gründe, weshalb man nicht mit GUI-Controls rechnet.
    Darüber lasse ich mich jetzt nicht aus.
    Und auch nicht über die Verwendung von VB6-Funktionen.

    Aber du solltest mal testen, was passiert, wenn du Komma statt Punkt eingibst.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Dein Code ist absoluter Murks. Wirf das ganze VB6-Zeugs über Bord und sieh dir richtige Konvertierung an. Man rechnet nicht mit Strings! Stelle dein Programm auf Option Strict On, dann werden dir solche Konvertierungsversuche angestrichen.
    Man rechnet immer mit numerischen Datentypen und so ziemlich jeder davon hat eine Parse/TryParse-Funktion, mit der du so ziemlich alles Konvertieren kannst, wenn du es richtig machst. Mal kurz an einem Beispiel:
    Die Parse-Funktion geht davon aus, dass du ihr eine Zahl in einem String übergibst, wenn da ein anderes Zeichen drin ist, kriegste ne Exception:

    VB.NET-Quellcode

    1. ​Dim test1 as String = "1057"
    2. Dim testi as Integer = Integer.Parse(test)
    3. 'Keine Exception
    4. Dim test2 as String = "257hd7"
    5. Dim testi2 as Integer = Integer.Parse(test2)
    6. 'Exception

    TryParse hingegen benötigt zwei Parameter und gibt eine Boolean zurück, diese gibt an ob die Konvertierung erfolgreich ist, wenn nicht, ist der Wert Nothing, also 0.

    VB.NET-Quellcode

    1. ​Dim i as Integer = 0
    2. If Integer.TryParse("2653", i) then
    3. 'war erfolgreich
    4. Else
    5. 'nicht erfolgreich
    6. End If

    Soviel zur Konvertierung. Als nächstes nehmen wir uns dieser Format-Funktion an, welche ebenfalls aus VB6 stammt. Diese wird einfach durch die ToString-Funktion ersetzt, welche meist überladbar ist(bei numerischen Datentypen kann man ein Format angeben).
    Dein Beispiel wäre also so korrekt:

    VB.NET-Quellcode

    1. ​Dim d1 as Double = 0
    2. Dim d2 as Double = 0
    3. If not Double.TryParse(anz1.SelectedItem.ToString, d1) then Return
    4. If not Double.TryParse(vk1.Text, d2) then Return
    5. Dim summe as Double = d1 * d2
    6. total1.Text = summe.ToString("00.00")
    7. 'oder kürzer
    8. total1.Text = (d1 * d2).ToString("00.00")


    Bitte versuche den Code zu verstehen und verinnerliche das, denn ohne Option Strict On und mit dem VB6-Zeugs wirst du früher oder später Probleme kriegen.

    LG
    Ich denk jetzt hab ich es:
    Berechnung: THX @ChOoSeMyNaMe

    Quellcode

    1. Dim d1 As Double = 0
    2. Dim d2 As Double = 0
    3. If not Double.TryParse(anz1.SelectedItem.ToString, d1) then Return
    4. If not Double.TryParse(vk1.Text, d2) then Return
    5. total1.Text = (d1 * d2).ToString("##0.00") & " €"


    Beim Anklicken der Textbox:

    Quellcode

    1. ​Private Sub vk1_Enter(sender As Object, e As EventArgs) Handles vk1.Enter
    2. vk1.Text = Nothing
    3. End Sub


    Und beim Verlassen:

    Quellcode

    1. ​ Private Sub vk1_Leave(sender As Object, e As EventArgs) Handles vk1.Leave
    2. Dim value As Double = vk1.Text
    3. vk1.Text= Format(value, "0.00 €")
    4. End Sub

    thommy1972de schrieb:

    Beim Anklicken der Textbox
    diese zu löschen widerspricht doch wohl jeder Anwenderphilosophie.
    Und
    Trenne Daten und GUI, wie @petaod Dir schon deutlich machte.
    Wenn Du noch mehre TextBoxen zur numerischen Eingabe umfunktionieren willst, mach Dir eine NumTextBox-Klasse, die die die Tastatureingaben auswertet und die eine Property Value bekommt, wo der numerischen Wert drin steht.
    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!
    Ich bete ja immer...
    Keine Textbox für Zahlen nehmen. Nimm ein NumericUpDown (stell es im Designer ein wie du es gern hättest) und nutze den Value, welcher schon eine Zahl ist... In nem NumericUpDown hast du schon alle Prüfungen von Fehleingaben abgefrühstückt und gut ist.
    Nutze was vorgesehen ist und frickel nicht oO
    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