Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TextBox - fehlendes erstes Zeichen
echdeneth
myCSharp.de - Member



Dabei seit:
Beiträge: 152
Herkunft: Sachsen, Herrnhut/Zittau

Themenstarter:

TextBox - fehlendes erstes Zeichen

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von echdeneth am .
"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 306

beantworten | zitieren | melden

Wieso nicht einfach https://docs.microsoft.com/de-de/dotnet/api/system.math.round?view=net-5.0 ?
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2.105

beantworten | zitieren | melden

Zitat
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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von chilic am .
private Nachricht | Beiträge des Benutzers
echdeneth
myCSharp.de - Member



Dabei seit:
Beiträge: 152
Herkunft: Sachsen, Herrnhut/Zittau

Themenstarter:

beantworten | zitieren | melden

Zitat von chilic
Und was passiert wenn du weiter tippst mit dem Wert?
also 1, 0, 0, 0, 0 ...
=> 0, 0, 0, 0 ...
Zitat von chilic
Den Ausdruck "if ((value % 1) > 0)" finde ich interessant. Da sollte ein Kommentar ran, der aussagt was das soll.
Ja, das stimmt...
Zitat von chilic
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
private Nachricht | Beiträge des Benutzers
echdeneth
myCSharp.de - Member



Dabei seit:
Beiträge: 152
Herkunft: Sachsen, Herrnhut/Zittau

Themenstarter:

beantworten | zitieren | melden

Zitat von JimStark
Wieso nicht einfach https://docs.microsoft.com/de-de/dotnet/api/system.math.round?view=net-5.0 ?

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
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.852

beantworten | zitieren | melden


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.
Zitat
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 :-)
private Nachricht | Beiträge des Benutzers
echdeneth
myCSharp.de - Member



Dabei seit:
Beiträge: 152
Herkunft: Sachsen, Herrnhut/Zittau

Themenstarter:

beantworten | zitieren | melden

Ich gelobe Besserung, mea culpa...
"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein
private Nachricht | Beiträge des Benutzers