Laden...

Nur decimal in Textbox erlauben

Erstellt von C#Gustl vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.717 Views
C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren
Nur decimal in Textbox erlauben

Hallo,

ich möchte das in einer Textbox nur die Eingabe von Decimal erlaubt ist.
Folgende sollen erlaubt sein:
-12,2
-12.2
12
32.5
23,4

Nicht erlaubt sollen nicht Nummern, außer Minus am Anfang und einem Punkt oder Komma zwischen den Zahlen.

Folgendes erlaubt das Minuszeichen, Komma oder Punkt irgendwo im Text und auch mehrmals.
Zudem werden auch Leerzeichen erlaubt.


private void NumberMinusValidationTextBox(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex(@"[^-0-9,\.]+");
            e.Handled = regex.IsMatch(e.Text);
        }

Hat da wer ein Snippet was auf meinen Anforderungen passt?

Danke im Voraus.

Gruß

1.029 Beiträge seit 2010
vor 6 Jahren

Hi,

schau dir mal das Behavior auf folgendem Link an:
https://stackoverflow.com/questions/16914224/wpf-textbox-to-enter-decimal-values

Das sollte das ja ziemlich elegant lösen.

Zu deiner Vorgehensweise - warum Regex, wenn du direkt decimal.TryParse verwenden könntest?

LG

C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren

Hallo,

ja, warum eigentlich. Weil wenn der Benutzer am Anfang nur das Minus eingibt er das dann nicht zulässt. Ist ja klar.

Ich habe es nun so gelöst:

private void NumberMinusValidationTextBox(object sender, TextCompositionEventArgs e)
        {   
            if((sender as TextBox).Text.Equals("") && e.Text.Equals("-"))
            {
                e.Handled = false;
                return;
            }
            decimal result;
            e.Handled = !decimal.TryParse((sender as TextBox).Text + e.Text, out result);
        }

Danke.

Gruß

T
461 Beiträge seit 2013
vor 6 Jahren

Ist das mit dem Minus überhaupt notwendig?


        private void NumberMinusValidationTextBox(object sender, TextCompositionEventArgs e)
        {
            TextBox tb = sender as TextBox;
            if( tb == null ) return;
            decimal d;
            e.Handled = !decimal.TryParse( tb.Text + e.Text, out d);
        }

Ich habe den Titel mal angepasst, so dass Suchende auch etwas damit anfangen können. EDIT: Ich sollte beim Wort "Shift" im Titel das "f" nicht vergessen... 😄

57 Beiträge seit 2012
vor 6 Jahren

führe doch einfach eine Konvertierung in eine Zahl durch, bspw. mit (Convert.ToDouble()

dann kannst du mit if checken, ob dabei ein Fehler auftritt oder nicht...

OO gibts seit Platon - hatte der auch C#?

16.834 Beiträge seit 2008
vor 6 Jahren

CWolle, das hat ThomasE. bereits direkt über Deinem Beitrag mit der besseren Variante TryParse bereits gesagt.
Für Convert.ToXyz gibt es fast keine Berechtigung, denn Convert wirft Exceptions und ist mit if nicht kombinierbar 😃