Walidacja liczb typu double w textBox

0

Zaczynam kolejny wątek, bo w międzyczasie walczyłem z walidacją liczb w textBoxie, gdzie również mam problemy..

Nauczony poprzednim wątkiem ( http://4programmers.net/Forum/Newbie/163487-walidacja_podanego_do_textboxa_imienia ) precyzuje jaki potrzebuje efekt walidacji:

Walidacja na poziomie wciskanych klawiszy!:

  • możliwe znaki do wpisania: '0-9' ; ',' (wpisując '.' ma pojawić się ',') ; '-' (liczby ujemne)
  • dodatkowo możliwe jest wpisanie tylko jeden raz ',' lub '-'

przykłady:
30,4
-5
-5,1

Rozumiem, że należy do tego przygotować odpowiedni regexp, ale jak to wszystko 'podpiąć' pod zdarzenie keypress ? (i aby dodatkowo działał oczywiście backspace).

Na ten moment powiedzmy mam coś takiego:

 private void numberTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((char.IsDigit(e.KeyChar) == false) && (e.KeyChar != '\b') && (e.KeyChar != ',')) e.Handled = true;
        }

i coś tam waliduje.. ale słabo to spełnia powyższe kryteria..

0

Musisz też sprawdzać, czy znak separatora dziesiętnego znajduje się już w łańcuchu czy nie, a jeśli tak, to czy jest w odpowiednim miejscu; Z kolei jeśli wciśnięto klawisz przecinka - musisz sprawdzić czy wpisany będzie w odpowiednim miejscu; A jeśli podano kropkę, to zamieniasz znak z parametru na przecinek; Jeśli przecinek ma wylądować na pierwszym miejscu łańcucha, to możesz dodatkowo wstawić znak wiodącego 0;

Proste :]

0

tylko właśnie nie wiem jak się do tego dobrać.. (jak by miał wyglądać kod który sprawdzi mi czy znak jest kropką a jeśli tak to ma go zamienić na przecinek..)

0
if (e.KeyChar == '.'){
  e.KeyChar = ',';
  // dalsze instrukcje
}

Coś w tym stylu?

1

Może lepiej tak:

char DecSep=CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator[0];
if((e.KeyChar== '.')||(e.KeyChar== ',')) e.KeyChar=DecSep;
0

@_13th_Dragon - dzięki! O to chodziło! (dalej jakoś poszło :) )

0

ale po co walidować sprawdzając cyfry, znak dziesiętny...

...nie lepiej sparsować liczbę i sprawdzić czy się udało?

Walidacja na poziomie wciskanych klawiszy!:
To jest prawie zawsze denerwujące i często zrobione źle.

1
mareKO napisał(a):

Walidacja na poziomie wciskanych klawiszy!:

  • możliwe znaki do wpisania: '0-9' ; ',' (wpisując '.' ma pojawić się ',') ; '-' (liczby ujemne)
  • dodatkowo możliwe jest wpisanie tylko jeden raz ',' lub '-'

Masz świadomość, że w ten sposób czynisz swoją aplikację bezużyteczną przy innych niż polskie ustawieniach językowych w systemie?

0

@somekind - teraz już jestem, ale to niczego nie zmienia :) (dzięki za info! )

1 użytkowników online, w tym zalogowanych: 0, gości: 1