VB Eingabe von Nackommastellen in Textbox begrenzen

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

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

    VB Eingabe von Nackommastellen in Textbox begrenzen

    Hallo Leute,

    Ich programmiere gerade ein kleines Programm mit Visual Basic. Es handelt sich dabei um eine Art Kassensystem. Meine Frage ist: Wie begrenze ich die Eingabe von zu vielen Nachkommastellen in einer TextBox?

    Beispiel: Wenn ich 100,999 eingebe und auf den Berechnen Button drücke, soll eine MsgBox mit einer Fehlermeldung erscheinen, dass nur zwei Nachkommastellen erlaubt sind.

    Ich habe die Textausgabe bereits auf 2 Nachkommastellen mit >Format(0,"0,00" €)< begrenzt. Das funktioniert auch einwandfrei.

    Danke schon einmal im Vorraus!

    Viele Grüße,
    Marius
    Willkommen im Forum. :thumbup:

    marius1411 schrieb:

    Nachkommastellen
    Nimm ein NumericUpDown statt der Textbox, das macht dies und noch viel mehr für Dich.
    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!
    Hallo RodFromGermany,

    Danke! :)

    Aber der NumericUpDown rundet mir doch einfach den Wert auf oder ab.. Ich will die Eingabe der Nachkommastellen ja auf 2 begrenzen, ohne dass er rundet. Also beispielsweise "25,55 €". Wenn ich jetzt 25,556 eingebe, soll eine Fehlermeldung kommen.

    Viele Grüße,
    Marius

    marius1411 schrieb:

    Aber der NumericUpDown rundet mir doch einfach den Wert auf oder ab
    Dann hast Du einen anderen NumericUpDown als ich.
    Meiner hat die Property DecimalPlaces.
    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!

    RodFromGermany schrieb:

    marius1411 schrieb:
    Aber der NumericUpDown rundet mir doch einfach den Wert auf oder ab

    Nee nee, das stimmt schon:
    • Stelle NumericUpDown auf 2 Dezimalstellen
    • Gebe zur Laufzeit 4,446 ein (nimmt er klaglos an)
    • Verlasse das NumericUpDown-Control
    • NumericUpDown-Control zeigt nun 4,45 an ...
    Vielleicht hilft Dir ja ein Control hier aus dem Forum: NumericTextbox - Zahleneingaben einfach gemacht

    us4711 schrieb:

    (nimmt er klaglos an)
    @marius1411 Testet dies:

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
    2. MessageBox.Show(NumericUpDown1.Value.ToString)
    3. End Sub
    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!
    @RodFromGermany, @marius1411
    Stimmt schon, der value beinhaltet 4,446
    Das ist aber genau der gleiche Mist wie bei Excel. Du formatierst eine Zelle auf 2 Dezimalstellen, aber als Wert steht in der Zelle eine Zahl mit 13 Dezimalstellen ...
    @us4711
    Jou.
    @marius1411 Dies zu behandeln ist das Validating da, das wird aber erst ausgelöst, wenn das NUD den Fokus verliert bzw. bei Enter:

    VB.NET-Quellcode

    1. Private Sub NumericUpDown1_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles NumericUpDown1.Validating
    2. MessageBox.Show(NumericUpDown1.Value.ToString)
    3. End Sub
    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!
    Also ich habe das alles mal versucht, was ihr mir vorgeschlagen habt. Es hat leider nicht wirklich für mich funktioniert. Vielleicht habe ich mich auch falsch ausgedrückt.Deswegen noch einmal anders.

    Ich würde das Ganze gern so machen, wie auf dem angehängten Bild. Ich habe also die Textbox "Geldeingabe", in die ich einen Betrag x eingeben kann, woraus dann (wenn ich auf Wechselgeld berechnen drücke) das Wechselgeld berechnet werden soll.

    Nun möchte ich aber erreichen, dass wenn ich in die Textbox "Geldeingabe" eine Zahl mit mehr als 2 Nachkommastellen eingebe (Bsp: 20,4489), eine MsgBox erscheint. Ich will nicht, dass er die Zahl rundet. Bei 20,4489, darf er NICHT 20,45 ausgeben.

    Danke für eure zahlreichen Antworten!
    Bilder
    • programm_oberfläche.PNG

      14,95 kB, 717×438, 291 mal angesehen

    marius1411 schrieb:

    Nachkommastellen
    Mach Dir eine eigene von TextBox abgeleitete Klasse. Lass nur Ziffern den DezimalSeparator und BackSpace zu.
    Wenn der DezimalSeparator gedrückt wurde, zählst Du die folgenden Ziffern unter Berücksichtigung von BackSpace und ignorierst alle weiteren Tastendrücke.
    Es ist keine MessageBox erforderlich, ggf. ein Beep().
    Feddich. :thumbsup:
    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!
    Also...

    VB.NET-Quellcode

    1. Private Sub NumericUpDown_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles NumericUpDown1.Validating
    2. Dim nud = DirectCast(sender, NumericUpDown)
    3. Dim trennzeichen = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator
    4. If nud.Value.ToString.Contains(trennzeichen) AndAlso nud.Value.ToString.Split(trennzeichen)(1).Length > 2 Then
    5. MessageBox.Show("Nix is")
    6. nud.Value = 0
    7. nud.Select()
    8. End If
    9. End Sub​

    Hier einfach mal dein NumericUpdown ins Handle... und gucken was passiert.

    EDIT: Habs mal gekürzt
    EDIT2: War noch nen Fehler bei Eingaben ohne Trennzeichen drinne
    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

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