Laden...

TextBox - fehlendes erstes Zeichen

Erstellt von echdeneth vor 2 Jahren Letzter Beitrag vor 2 Jahren 315 Views
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 2 Jahren
TextBox - fehlendes erstes Zeichen

Moin,

in meinem Projekt (MVVM) habe ich, unter anderem, eine Textbox mit Binding:


          <TextBox materialDesign:HintAssist.Hint="Bezeichnung "
                         Style="{StaticResource MaterialDesignFloatingHintTextBox}"
                         FontSize="18"
                         Padding="0" Grid.Column="1" 
                         VerticalContentAlignment="Bottom" 
                         HorizontalContentAlignment="Right"
                         Text="{Binding Wert, UpdateSourceTrigger=PropertyChanged, StringFormat=D, Mode=TwoWay}">
          </TextBox>

Gebunden an Property einer Klasse:


        public decimal Wert
        {
            get => _wert;
            set
            {
                if ((value % 1) > 0)
                {
                    string[] v = value.ToString().Split(',');
                    if (v[1].Length == 3) return;
                }
                _wert = value;
                NotifyPropertyChanged();
                NotifyPropertyChanged("MwSt");
                NotifyPropertyChanged("BruttoWert");
            }
        }

Das im if ist mein bescheidener Versuch Nachkommastellen über 2 zu verhindern.

Wie gesagt, die erste Eingabe klappt problemlos, wenn ich diese aber lösche, und "1000" eingabe erscheint nur "000" - laut Einzelkschritt wird die "1" aber in "Wert" geschrieben...
Habe auch keinen Ansatz...

Danke für Hilfe

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

309 Beiträge seit 2020
vor 2 Jahren
C
2.121 Beiträge seit 2010
vor 2 Jahren

laut Einzelkschritt wird die "1" aber in "Wert" geschrieben...

Und was passiert wenn du weiter tippst mit dem Wert?

Den Ausdruck "if ((value % 1) > 0)" finde ich interessant. Da sollte ein Kommentar ran, der aussagt was das soll.

Length == 3 wird nur aktiv wenn genau drei Nachkommastellen eingegeben werden. Was wenn jemand eine Zahl mit 5 Nachkommastellen hineinkopiert?
Machs lieber etwas überschaubarer, zum Beispiel teste ob 100 * value noch Nachkommastellen hat.

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 2 Jahren

Und was passiert wenn du weiter tippst mit dem Wert?

also 1, 0, 0, 0, 0 ...
=> 0, 0, 0, 0 ...

Den Ausdruck "if ((value % 1) > 0)" finde ich interessant. Da sollte ein Kommentar ran, der aussagt was das soll.

Ja, das stimmt...

Length == 3 wird nur aktiv wenn genau drei Nachkommastellen eingegeben werden. Was wenn jemand eine Zahl mit 5 Nachkommastellen hineinkopiert?

Daran habe ich gar nicht gedacht, wird korrigiert

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 2 Jahren

Wieso nicht einfach
>
?

Würde dann bei einer Eingabe von 100,225 nicht 100,23 zurückgegeben werden statt 100,22?
Muss das mal abchecken wie das sein soll...

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein

16.806 Beiträge seit 2008
vor 2 Jahren

string[] v = value.ToString().Split(',');

Sowas ist mit das Schlimmste, was man als (Desktop-)Entwickler tun kann. Zumindest gehört es zu den extrem fahrlässigen Dingen, die man ohne Aufwand einfach korrekt machen kann. 🙂
Damit implizierst Du, dass im Endeffekt die UI nur mit solchen Regionalsettings funktionieren wird, dass ein Komma als Trennzeichen erkannt wird.

So ein Code-Stück hat mich mal Wochen Diskussion mit dem Finanzamt gekostet, weil eine bekannte Steuersoftware ebenfalls nur mit gewissen Regionalsettings richtige Werte ausspuckt / ausgespuckt hat.

Und ich bin halt nen Entwickler und hab daher (logischerweise) mein System auch auf Englisch - und nicht auf Deutsch.
Hab denen auch dank Decompiler die Fehler aufgezeigt (genau solche String-Fummeleien mit Euro-Werten und Zeitangaben) und Lektüre mitgegeben, wie man es richtig macht - hat sie nicht interessiert.
Seitdem hab ich extra nur wegen dieser Software eine deutsche VM, weil offenbar die Entwickler nicht in der Lage sind das zu fixen.

Und wenn ich hier sehe, dass es wohl auch wieder um MwSt geht: bastel wirklich nicht rum. Machs richtig.
Andere Leute können da echt richtig Probleme bekommen, wenn Du nicht so programmierst, wie man das tun sollte.

Würde dann bei einer Eingabe von 100,225 nicht 100,23 zurückgegeben werden statt 100,22?

  1. Immer die Regionalsettings beachten oder dem Benutzer Settings geben
  2. Wenn Du nicht abrunden sondern abschneiden willst, dann willst vermutlich Truncate (round to zero). Aber in Herrgottsnamen mach sowas bitte nicht mit String-Fummeleien, die nach Fehlern nur Schreien 🙂
echdeneth Themenstarter:in
161 Beiträge seit 2019
vor 2 Jahren

Ich gelobe Besserung, mea culpa...🙂

"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein