Hi,
ich möchte Geldbeträge in einer Textbox darstellen, mit denen ich dann einfach weiterrechnen kann, der User soll diese editieren können. Auch Werte unter 0 müssen möglich sein.
Habe jetzt zu einer maskedTextbox gegriffen, aber irgendwie taugt das nicht. Als Mask habe ich "00000000,00$"
Aber dabei bin ich genau auf achtstellige Zahlen festgelegt, und unter 0 geht auch nix. Wie mus die mask richtig lauten, für mein Vorhaben? Oder ist die maskedTextbox einfach ungeeignet dafür?
Hallo Danwe,
schau dir doch mal die möglichkeiten der Mask eigenschaft an
dann wirst du schnell auf die lösung kommen
mfg
Hi,
hab dort eigentlich schon geschaut, ein weiterer Blick hat mich jetzt auf das gebracht:
"#######.99"
Die Eingabe funktioniert jetzt ganz gut, auch unter null, danke dafür 👍
Komisch sind noch die Werte die ich bekomme, wenn ich float.toString("#######.99") ausführe. Wenn ich z.b. den Wert 444.4 als float habe, gibt er mir als String "44499" zurück. Was soll das?
Komisch sind noch die Werte die ich bekomme, wenn ich float.toString("#######.99") ausführe. Wenn ich z.b. den Wert 444.4 als float habe, gibt er mir als String "44499" zurück. Was soll das?
Laut Beschreibung in der :rtfm: **:::
**Single.ToString-Methode (String) **
'.' - Ein kulturabhängiges Dezimaltrennzeichen.
Dein Rechner arbeitet höchstwahrscheinlich in einer DE-Kultur, also wird der von Dir angegebene Punkt als Tausender-Trennzeichen interpretiert. An dieser Stelle ist es meistens besser, explizit eine kulturunabhängige Variante zu verwenden; dafür gibt es schließlich Überladungen.
Jürgen
Ich habs schnell mal mit #######,99 in der float.toString ausprobiert, passiert jedoch das Gleiche.
Hallo juetho,
dieses eine Mal liegst du daneben. 🙂 Der "." taucht ja in einer Maske, respektive in einem Formatstring auf. Und da ist er kulturunabhängig immer ein ".".
Hallo Danwe,
die Syntax für Masken (MaskedTextbox.Mask) und Formatstrings (float.ToString) ist einfach nicht gleich. Bei float.ToString müsstest du #######,00 verwenden. Aber auch hier muss man sagen: hättest du in die :rtfm: Doku geguckt, dann hättest du schnell auf die Lösung kommen können.
herbivore
Also in der Doku finde ich dazu nichts hilfreiches, anders als zur MaskedTextbox Mask.
#######,00 funktioniert auch nicht, richtiger ist " 0,00" allerdings habe ich dann das Problem dass kein Vorzeichen übernommen wird. Ich könnte "+" oder "-" mit in den String bringen, aber wie geht das dynamisch?
Hallo Danwe,
Also in der Doku finde ich dazu nichts hilfreiches
natürlich seht das alles (hilfreich) in der :rtfm: Doku. Siehe Benutzerdefinierte Zahlenformatzeichenfolgen.
#######,00 funktioniert auch nicht
natürlich funktioniert #######,00. Es ist nur die Frage, was genau man erreichen will. Und da kann es natürlich sein, dass mit #######,00 alleine noch nicht alle deine Bedürfnisse erfüllt sind.
allerdings habe ich dann das Problem dass kein Vorzeichen übernommen wird.
Auch wie man das Vorzeichen richtig behandelt steht natürlich in der Doku. Gleicher Link.
herbivore
Danke, hätte auch schon früher drauf kommen könnnen...
das Problem dass ich so merkwürdige Strings rausbekommen habe war dass ich es gleich in einem MaskedTextbox-Feld darstellen lassen habe, u. da hat er nochmal komisch rumformatiert, also doppelt gemobbelt.
also m.E. nach müsste es #######**.**00 sein, da .NET die englischen Formatierungszeichen benutzt 🙂
Aber du müsstest theoretisch auch explizit ein + vor die positiven Beträge bekommen können, ist halt nur etwas komplexer: "+######.00;-######.00;0.00" glaub ich (nicht nachgeguckt, aber lieber vorher Reihenfolge nochmal nachschlagen, aber ich glaube es war positiv;negativ;null)