Walidacja danych użytkownika w formularzach systemu Windows

Gdy użytkownicy wprowadzają dane do aplikacji, warto sprawdzić, czy dane są prawidłowe, zanim aplikacja będzie jej używać. Może być wymagane, aby niektóre pola tekstowe nie były zerowe, czy pole zostało sformatowane jako numer telefonu lub inny typ dobrze sformułowanych danych lub że ciąg nie zawiera żadnych niebezpiecznych znaków, których można użyć do naruszenia zabezpieczeń bazy danych. Formularze systemu Windows umożliwiają zweryfikowanie danych wejściowych w aplikacji na kilka sposobów.

Walidacja za pomocą kontrolki MaskedTextBox

Jeśli musisz wymagać od użytkowników wprowadzenia danych w dobrze zdefiniowanym formacie, takim jak numer telefonu lub numer części, możesz to zrobić szybko i przy minimalnym kodzie za pomocą kontrolki MaskedTextBox . Maska to ciąg składający się z znaków z języka maskowania, który określa, które znaki można wprowadzać w dowolnym miejscu w polu tekstowym. Kontrolka wyświetla zestaw monitów dla użytkownika. Jeśli na przykład użytkownik wpisze niepoprawny wpis, wpisze literę, gdy wymagana jest cyfra, kontrolka automatycznie odrzuci dane wejściowe.

Język maskowania używany przez MaskedTextBox program jest bardzo elastyczny. Umożliwia określenie wymaganych znaków, opcjonalnych znaków, znaków literałów, takich jak łączniki i nawiasy, znaki waluty i separatory dat. Kontrolka działa również dobrze w przypadku powiązania ze źródłem danych. Zdarzenie Format powiązania danych może służyć do ponownego sformatowania danych przychodzących w celu zachowania zgodności z maską, a Parse zdarzenie może służyć do ponownego sformatowania danych wychodzących w celu zachowania zgodności ze specyfikacjami pola danych.

Aby uzyskać więcej informacji, zobacz MaskedTextBox Control (Kontrolka MaskedTextBox).

Walidacja sterowana zdarzeniami

Jeśli chcesz mieć pełną kontrolę programową nad walidacją lub musisz wykonać złożone kontrole poprawności, należy użyć zdarzeń weryfikacji wbudowanych w większość kontrolek Windows Forms. Każda kontrolka akceptująca dane wejściowe użytkownika w postaci bezpłatnej ma Validating zdarzenie, które będzie wykonywane za każdym razem, gdy kontrolka wymaga weryfikacji danych. W metodzie Validating obsługi zdarzeń można zweryfikować dane wejściowe użytkownika na kilka sposobów. Jeśli na przykład masz pole tekstowe, które musi zawierać kod pocztowy, możesz wykonać walidację w następujący sposób:

  • Jeśli kod pocztowy musi należeć do określonej grupy kodów pocztowych, możesz wykonać porównanie ciągów na danych wejściowych, aby zweryfikować dane wprowadzone przez użytkownika. Jeśli na przykład kod pocztowy musi znajdować się w zestawie {10001, 10002, 10003}, możesz użyć porównania ciągów, aby zweryfikować dane.

  • Jeśli kod pocztowy musi znajdować się w określonej formie, możesz użyć wyrażeń regularnych, aby zweryfikować dane wprowadzone przez użytkownika. Na przykład, aby zweryfikować formularz ##### lub #####-####, możesz użyć wyrażenia ^(\d{5})(-\d{4})?$regularnego . Aby zweryfikować formularz A#A #A#, możesz użyć wyrażenia [A-Z]\d[A-Z] \d[A-Z]\dregularnego . Aby uzyskać więcej informacji na temat wyrażeń regularnych, zobacz .NET Framework Regular Expressions and Regular Expression Examples (Wyrażenia regularne platformy .NET Framework i przykłady wyrażeń regularnych).

  • Jeśli kod pocztowy musi być prawidłowym kodem pocztowym Stany Zjednoczone, możesz wywołać usługę sieci Web kodu pocztowego, aby zweryfikować dane wprowadzone przez użytkownika.

Zdarzenie Validating jest dostarczane obiekt typu CancelEventArgs. Jeśli ustalisz, że dane kontrolki są nieprawidłowe, możesz anulować Validating zdarzenie, ustawiając właściwość tego obiektu Cancel na truewartość . Jeśli właściwość nie zostanie ustawiona Cancel , formularze systemu Windows założą, że weryfikacja zakończyła się pomyślnie dla tej kontrolki i zgłosi Validated zdarzenie.

Aby zapoznać się z przykładem kodu, który weryfikuje adres e-mail w obiekcie TextBox, zobacz Validating.

Powiązanie danych i walidacja sterowana zdarzeniami

Walidacja jest bardzo przydatna, gdy kontrolki są powiązane ze źródłem danych, takim jak tabela bazy danych. Korzystając z walidacji, możesz upewnić się, że dane kontrolki spełniają format wymagany przez źródło danych i że nie zawiera żadnych znaków specjalnych, takich jak znaki cudzysłowu i ukośniki wsteczne, które mogą być niebezpieczne.

Gdy używasz powiązania danych, dane w kontrolce są synchronizowane ze źródłem danych podczas wykonywania Validating zdarzenia. Jeśli anulujesz Validating zdarzenie, dane nie zostaną zsynchronizowane ze źródłem danych.

Ważne

Jeśli masz niestandardową walidację Validating , która odbywa się po zdarzeniu, nie wpłynie to na powiązanie danych. Jeśli na przykład masz kod, Validated który próbuje anulować powiązanie danych, powiązanie danych będzie nadal występować. W takim przypadku, aby przeprowadzić walidację w Validated zdarzeniu, zmień właściwość Trybu aktualizacji źródła danych kontrolki (w obszarze (Databindings)(Advanced)\) z OnValidation na Nigdy i dodaj kontrolkę YOURFIELD"].WriteValue().DataBindings["<> do kodu weryfikacji.

Niejawna i jawna weryfikacja

Więc kiedy dane kontrolki są weryfikowane? To do Ciebie, deweloper. W zależności od potrzeb aplikacji można użyć niejawnej lub jawnej weryfikacji.

Niejawna walidacja

Niejawna metoda sprawdzania poprawności weryfikuje dane podczas ich wprowadzania przez użytkownika. Dane można zweryfikować, gdy dane są wprowadzane w kontrolce, odczytując klawisze podczas ich naciskania lub częściej, gdy użytkownik pobiera fokus wejściowy od jednej kontrolki i przechodzi do następnego. Takie podejście jest przydatne, gdy chcesz przekazać użytkownikowi natychmiastową opinię na temat danych podczas ich pracy.

Jeśli chcesz użyć niejawnej weryfikacji dla kontrolki, musisz ustawić właściwość tej kontrolki AutoValidate na EnablePreventFocusChange lub EnableAllowFocusChange. Jeśli anulujesz Validating zdarzenie, zachowanie kontrolki zostanie określone przez wartość przypisaną do AutoValidateelementu . Jeśli przypisano polecenie EnablePreventFocusChange, anulowanie zdarzenia spowoduje Validated , że zdarzenie nie zostanie wykonane. Fokus danych wejściowych pozostanie na bieżącej kontrolce, dopóki użytkownik nie zmieni danych na prawidłowe dane wejściowe. Jeśli przypisano EnableAllowFocusChangeelement , Validated zdarzenie nie nastąpi po anulowaniu zdarzenia, ale fokus nadal zmieni się na następną kontrolkę.

Przypisanie Disable do właściwości zapobiega całkowitej AutoValidate niejawnej weryfikacji. Aby zweryfikować kontrolki, należy użyć jawnej weryfikacji.

Jawna walidacja

Metoda jawnego sprawdzania poprawności weryfikuje dane jednocześnie. Możesz zweryfikować dane w odpowiedzi na akcję użytkownika, taką jak kliknięcie przycisku Zapisz lub link Dalej. Po wykonaniu akcji użytkownika można wyzwolić jawną walidację w jeden z następujących sposobów:

  • Wywołaj metodę Validate , aby zweryfikować ostatnią kontrolkę, aby utracić fokus.

  • Wywołaj metodę ValidateChildren , aby zweryfikować wszystkie kontrolki podrzędne w kontrolce formularza lub kontenera.

  • Wywołaj metodę niestandardową, aby ręcznie zweryfikować dane w kontrolkach.

Domyślne zachowanie niejawnej walidacji dla kontrolek formularzy systemu Windows

Różne kontrolki formularzy systemu Windows mają różne wartości domyślne dla ich AutoValidate właściwości. W poniższej tabeli przedstawiono najbardziej typowe kontrolki i ich wartości domyślne.

Kontrolka Domyślne zachowanie walidacji
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Właściwość nie jest uwidoczniona w programie Visual Studio
ToolStripContainer Właściwość nie jest uwidoczniona w programie Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Zamykanie formularza i zastępowanie walidacji

Gdy kontrolka zachowuje fokus, ponieważ dane, które zawiera, są nieprawidłowe, nie można zamknąć formularza nadrzędnego na jeden ze zwykłych sposobów:

  • Klikając przycisk Zamknij.

  • Wybierając pozycję Zamknij w menu System .

  • Programowo wywołując metodę Close .

Jednak w niektórych przypadkach możesz zezwolić użytkownikowi na zamknięcie formularza niezależnie od tego, czy wartości w kontrolkach są prawidłowe. Walidację można zastąpić i zamknąć formularz, który nadal zawiera nieprawidłowe dane, tworząc procedurę obsługi dla zdarzenia formularza FormClosing . W przypadku ustaw Cancel właściwość na false. Wymusza to zamknięcie formularza. Aby uzyskać więcej informacji i przykład, zobacz Form.FormClosing.

Uwaga

Jeśli wymusisz zamknięcie formularza w ten sposób, wszelkie dane w kontrolkach formularza, które nie zostały jeszcze zapisane, zostaną utracone. Ponadto formy modalne nie weryfikują zawartości kontrolek po ich zamknięciu. Nadal możesz użyć walidacji kontrolek, aby zablokować fokus na kontrolce, ale nie musisz być zaniepokojony zachowaniem skojarzonym z zamykaniem formularza.

Zobacz też