Laden...

nur decimal werte erlauben/validieren in einem Textbox

Erstellt von sindibad vor 3 Jahren Letzter Beitrag vor 3 Jahren 343 Views
S
sindibad Themenstarter:in
110 Beiträge seit 2012
vor 3 Jahren
nur decimal werte erlauben/validieren in einem Textbox

Hallo,
ich habe ein paar Textboxen für die Eingabe von Decimal Werte z.B. 3, 4 oder mit Decimal Punkt z.B. 3.67 (immer zwei Stellen nach em Komma).

wie kann ich am besten realisieren, dass nur gültige Werte eingegeben werden bzw validieren?
ist es eine gute Lösung das eingegebene Komma , durch Punkt . zu ersetzen?
ich habe versucht StringFormat zu benutzen aber 1,1 wird als 11 interpretiert


<TextBox Grid.Row="4" Grid.Column="1"
                         Text="{Binding Path=PrintingData.Start, StringFormat=0{0.0}, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}"
                         Height="26" HorizontalAlignment="Right" Name="textBoxStart" VerticalAlignment="Top" Width="65"
                PreviewTextInput="textBoxStart_PreviewTextInput" Margin="0,0,47,0" />


public decimal Start
        {
            get { return _Start; }
            set
            {
                if (_Start != value)
                {
                    _Start = value;

                    // update end value for non marker
                    if (_IsMarker == false)
                        End = _Start + _Length;
                    else
                        End = _Start + _Length - 1;

                    OnPropertyChanged("Start");
                }
            }
        }
 private string ValidateStart()
        {
            // avoid problem because of decimal point . or , (german or englisch system)
            var nfi = new NumberFormatInfo();
            nfi.NumberDecimalSeparator = ".";
            var p = Start.ToString(nfi);

            if (Start < 0) return "Start can not be a negative value!";

            if (_IsMarker == false)
            {
                // checked Format xxxxxxx.x
                var regex = new Regex(@"^\d+(\.\d{1})?$");
                if (regex.IsMatch(p) == false)
                    return "Start has wrong format!";
                return null;
            }
....
}

16.835 Beiträge seit 2008
vor 3 Jahren

In WPF und mit MVVM macht man das üblicherweise mit ValidationRules.
Siehe Binding Validation in den Docs: How to: Implement Binding Validation - WPF .NET Framework