Laden...

Darstellung von Geldbeträgen: MaskedTextbox?

Erstellt von Danwe vor 16 Jahren Letzter Beitrag vor 16 Jahren 6.483 Views
D
Danwe Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren
Darstellung von Geldbeträgen: MaskedTextbox?

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?

2.223 Beiträge seit 2005
vor 16 Jahren

Hallo Danwe,

schau dir doch mal die möglichkeiten der Mask eigenschaft an

MaskedTextBox.Mask Property

dann wirst du schnell auf die lösung kommen

mfg

D
Danwe Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren

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?

J
3.331 Beiträge seit 2006
vor 16 Jahren

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

D
Danwe Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren

Ich habs schnell mal mit #######,99 in der float.toString ausprobiert, passiert jedoch das Gleiche.

49.485 Beiträge seit 2005
vor 16 Jahren

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

D
Danwe Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren

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?

49.485 Beiträge seit 2005
vor 16 Jahren

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

D
Danwe Themenstarter:in
209 Beiträge seit 2007
vor 16 Jahren

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.

O
778 Beiträge seit 2007
vor 16 Jahren

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)