Win7 & Win8 Doof??

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

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Win7 & Win8 Doof??

    Hallo Com,

    Ich habe gerade für einen Freund ein "Progrämmchen" gemacht der den Steuersatz rechnet +19% und -19%

    Bei mir (Windoof7 user) geht alles prima...

    Bei meinem Freund (Windooooof8.1 user) ging dies voll in die Hose:


    Hier der Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports ComponentFactory.Krypton.Toolkit
    2. Public Class Form1 : Inherits ComponentFactory.Krypton.Toolkit.KryptonForm
    3. Public netto As Double
    4. Public steuersatz As Integer = 19
    5. Public ergebnis As Double
    6. Private Sub btn_plus19_Click(sender As Object, e As EventArgs) Handles btn_plus19.Click
    7. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    8. Dim netto2 As String = replace2(tb_betrag.Text)
    9. netto = CDbl(netto2)
    10. ergebnis = (netto / 100) * 119
    11. tb_ergebnis.Text = CStr(Math.Round(ergebnis, 2))
    12. tb_ergebnis.Text = replace(tb_ergebnis.Text) & " €"
    13. Else
    14. tb_betrag.BackColor = Color.Red
    15. End If
    16. End Sub
    17. Private Sub btn_minus19_Click(sender As Object, e As EventArgs) Handles btn_minus19.Click
    18. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    19. netto = CDbl(replace2(tb_betrag.Text))
    20. ergebnis = (netto * 100) / 119
    21. tb_ergebnis.Text = replace(CStr(Math.Round(ergebnis, 2)) & " €")
    22. Else
    23. tb_betrag.BackColor = Color.Red
    24. End If
    25. End Sub
    26. Private Sub tb_betrag_MouseClick(sender As Object, e As MouseEventArgs) Handles tb_betrag.MouseClick
    27. tb_betrag.BackColor = Color.White
    28. End Sub
    29. Public Function replace(ByVal betrag As String) As String
    30. betrag = betrag.Replace(".", ",")
    31. Return betrag
    32. End Function
    33. Public Function replace2(ByVal betrag As String) As String
    34. betrag = betrag.Replace(",", ".")
    35. Return betrag
    36. End Function
    37. Private Sub KryptonButton1_Click(sender As Object, e As EventArgs) Handles KryptonButton1.Click
    38. tb_betrag.Text = Nothing
    39. tb_ergebnis.Text = Nothing
    40. End Sub
    41. End Class


    Ich weis das es nicht schön Programmiert ist, diesbezüglich möchte ich auch nicht Fragen, sondern nur warum das Windoof8 dies nicht richtig rechnet...

    mfg



    lg & thx
    Sieht mir nach einem Problem mit der Systemsprache aus, da das Ergebnis um exakt zwei Stellen verschoben ist. Das Komma wird nur auf deutschsprachigen Systemen (vielleicht noch wo anders, aber nichts, das ich kenne) als Dezimaltrennzeichen verwendet, auf einem englischen System z.B. wird es einfach ignoriert.

    Artentus schrieb:

    Sieht mir nach einem Problem mit der Systemsprache aus, da das Ergebnis um exakt zwei Stellen verschoben ist. Das Komma wird nur auf deutschsprachigen Systemen (vielleicht noch wo anders, aber nichts, das ich kenne) als Dezimaltrennzeichen verwendet, auf einem englischen System z.B. wird es einfach ignoriert.


    es ist nicht nur beim ,(komma) sondern auch beim .(punkt)

    nafets3646 schrieb:

    Zeig doch mal deine Methode, dann können wir dir sicher weiterhelfen.


    im Post #1 steht mein ganzer Code drin.... :P

    ErfinderDesRades schrieb:


    Also verwende besser NumericUpdowns zur Eingabe.


    hmm, dann könnte ich es eigentlich auch mit 2 TextBoxen machen. die eine für Euro und die 2te für Cent...

    Aber schon komisch das dies Plötzlich nicht mehr geht oder das sowas überhaupt schief gehen kann nur wegen einem Komma oder Punkt. Den es geht mit beidem nicht, weder mit . noch mit ,
    @.Scare Ich hab ein englisches W7, da kabe ich mit Deinem Code die Ergebnisse wie Du bei W8.
    - Gib den berechneten Betrag aus mit

    VB.NET-Quellcode

    1. tb_ergebnis.Text = ergebnis.ToString("c")

    - Ersetze die Funktion Replace() durch eine Funktion Convert(), die ein Double zurückgibt. Sorge dafür, dass der String einer Kultur genügt und konvertiere dann entsprechend dieser Kultur:

    VB.NET-Quellcode

    1. Public Function Convert(ByVal betrag As String) As Double
    2. betrag = betrag.Replace(".", ",")
    3. Return Double.Parse(betrag, System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"))
    4. End Function

    - Mach aus der Variable Netto ein Double und feddich.

    VB.NET-Quellcode

    1. Public Class Form1
    2. Public netto As Double
    3. Public steuersatz As Double = 19
    4. Public ergebnis As Double
    5. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    6. tb_betrag.Text = Nothing
    7. tb_ergebnis.Text = Nothing
    8. End Sub
    9. Private Sub ButtonPlus_Click(sender As System.Object, e As System.EventArgs) Handles ButtonPlus.Click
    10. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    11. netto = Convert(tb_betrag.Text)
    12. ergebnis = (netto / 100) * 119
    13. tb_ergebnis.Text = ergebnis.ToString("c")
    14. Else
    15. tb_betrag.BackColor = Color.Red
    16. End If
    17. End Sub
    18. Private Sub ButtonMinus_Click(sender As System.Object, e As System.EventArgs) Handles ButtonMinus.Click
    19. If Not String.IsNullOrWhiteSpace(tb_betrag.Text) Then
    20. netto = Convert(tb_betrag.Text)
    21. ergebnis = (netto * 100) / 119
    22. tb_ergebnis.Text = ergebnis.ToString("c")
    23. Else
    24. tb_betrag.BackColor = Color.Red
    25. End If
    26. End Sub
    27. Public Function Convert(ByVal betrag As String) As Double
    28. betrag = betrag.Replace(".", ",")
    29. Return Double.Parse(betrag, System.Globalization.CultureInfo.CreateSpecificCulture("de-DE"))
    30. End Function
    31. End Class

    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 habe mir bei ähnlichen Problemen ein eigenes Control gebaut, eine "NumericTextbox".
    Diese modifizierte Textbox hat eine neue Property value as Double, und kann damit sogar gebunden werden.
    Ich habe soeben das Control im Bereich Libraries/Controls eingestellt.
    Der Beitrag muss jedoch von einem Moderator freigeschaltet werden.
    Ja, hab ich gefunden.
    Mein Teil ist jedoch etwas aufwendiger, mit Min, Max-Wert, Anzahl Dezimalstellen, Formatierung, Datenbindung etc., schon recht komfortabel.
    Ist mein erster Beitrag zur Prüfung durch Moderatoren, keine Ahnung wielange das dauern kann.