2011-06-19 17 views
7

Mam pewien kod, który sprawdza i upewnia się, że gdy użytkownicy wprowadzą w pole, należy wprowadzić liczbę całkowitą od 1 do 10.C# - TextBox Validation

Chociaż użytkownicy koncentrują się na polu, "złe" dane (np. "Fdgfdg") pozostają w polu. Czyli niektórzy mogą zademonstrować, w jaki sposób, gdy fokus zostanie utracony na polu, jeśli dane nie są prawidłowe, zamiast nich zostanie wprowadzona wartość domyślna, np. 5

private void textBox4_TextChanged(object sender, EventArgs e) 
     { 
      try 
      { 
       int numberEntered = int.Parse(textBox4.Text); 
       if (numberEntered < 1 || numberEntered > 10) 
       { 
        MessageBox.Show("You must enter a number between 1 and 10"); 
       } 
      } 
      catch (FormatException) 
      { 

       MessageBox.Show("You need to enter an integer"); 
      } 
     } 
+1

@Gats: Jest winforms pulpit aplikacja ... –

+0

To nie winforms strona internetowa. –

+1

@Gats: Nawet jeśli była to aplikacja internetowa, walidacja po stronie serwera jest obowiązkowa. Sprawdzanie poprawności po stronie klienta powinno być dodatkowym ułatwieniem po walidacji po stronie serwera. –

Odpowiedz

14

Istnieje kilka wydarzeń, które można użyć tutaj, Leave, LostFocus i Validating jest więcej dyskusji na temat tych różnych wydarzeń na MSDN here.

W pewnych scenariuszach Leave i LostFocus nie zadziała więc najlepiej użyć w przypadku, to wydarzenie Validating:

textBox1.Validating += new CancelEventHandler(textBox1_Validating); 


    void textBox1_Validating(object sender, CancelEventArgs e) 
    { 
     int numberEntered; 

     if (int.TryParse(textBox1.Text, out numberEntered)) 
     { 
      if (numberEntered < 1 || numberEntered > 10) 
      { 
       MessageBox.Show("You have to enter a number between 1 and 10"); 
       textBox1.Text = 5.ToString(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("You need to enter an integer"); 
      textBox1.Text = 5.ToString(); 
     } 
    } 
+0

Dziękuję, to doskonały przykład – Jay

0

jeśli są ręcznie toczenia walidacji jak to zrobić tutaj, wszystko co musisz zrobić, to ustawić wartości domyślnych po MessageBox.Show()

w standardowych WinForms nie sądzę masz żadnego wsparcia ramową walidacji, ale można spojrzeć na to: http://msdn.microsoft.com/en-us/library/ms951078.aspx inspiracji, więc nie rozpraszają tę logikę całej swojej aplikacji

+0

Jasne myślenie .. :) – Jay

0

nas e zdarzenie Leave sprawie kontroli tekstowego do sprawdzania poprawności i ustawić wartość domyślną