Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy użytkownicy wprowadzają dane do aplikacji, możesz sprawdzić, czy dane są prawidłowe przed użyciem przez aplikację. Może być wymagane, aby niektóre pola tekstowe nie miały zerowej długości, aby pole było sformatowane jako numer telefonu lub aby ciąg znaków nie zawierał nieprawidłowych znaków. Formularze systemu Windows umożliwiają zweryfikowanie danych wejściowych w aplikacji na kilka sposobów.
Kontrolka 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 jest wymagana cyfra, kontrolka automatycznie odrzuca dane wejściowe.
Język maskowania używany przez MaskedTextBox jest 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.
Walidacja sterowana zdarzeniami
Jeśli chcesz mieć pełną kontrolę programową nad walidacją lub potrzebujesz złożonych kontroli poprawności, należy użyć zdarzeń weryfikacji wbudowanych w większość kontrolek Windows Forms. Każda kontrolka, która akceptuje dane wejściowe użytkownika w formie dowolnej, posiada zdarzenie Validating, które jest wywoływane za każdym razem, gdy kontrolka wymaga weryfikacji danych. W kodzie procedury obsługi zdarzeń Validating 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 w celu zweryfikowania danych wprowadzonych 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ślonym formularzu, 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ć formularzA#A #A#
, możesz użyć wyrażenia[A-Z]\d[A-Z] \d[A-Z]\d
regularnego . Aby uzyskać więcej informacji na temat wyrażeń regularnych, zobacz .NET Regular Expressions and Regular Expression Examples (Wyrażenia regularne platformy .NET i przykłady wyrażeń regularnych).Jeśli kod pocztowy musi być prawidłowym kodem Zip w Stanach Zjednoczonych, możesz wywołać usługę internetową, aby zweryfikować dane wprowadzone przez użytkownika.
Zdarzeniu Validating dostarczany jest obiekt typu CancelEventArgs. Jeśli ustalisz, że dane kontrolki są nieprawidłowe, anuluj zdarzenie Validating poprzez ustawienie właściwości Cancel tego obiektu na wartość true
. Jeśli nie ustawisz właściwości Cancel, Windows Forms zakłada, że walidacja przebiegła pomyślnie dla tej kontrolki i zgłasza zdarzenie Validated.
Aby zapoznać się z przykładem kodu, który weryfikuje adres e-mail w elemencie TextBox, zobacz odniesienie do zdarzenia Validating.
Kontrolki związane z danymi z walidacją sterowaną zdarzeniami
Walidacja jest przydatna w przypadku powiązania kontrolek 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 zdarzenia Validating. Jeśli anulujesz Validating zdarzenie, dane nie zostaną zsynchronizowane ze źródłem danych.
Ważne
pl-PL: Jeśli masz niestandardową walidację, która odbywa się po zdarzeniu Validating, nie wpłynie to na powiązanie danych. Jeśli na przykład masz kod w Validated, który próbuje anulować powiązanie danych, powiązanie danych nadal będzie zachodzić. W takim przypadku, aby przeprowadzić walidację Validated w zdarzeniu, zmień właściwość kontrolki Binding.DataSourceUpdateMode
z DataSourceUpdateMode.OnValidation na DataSourceUpdateMode.Never, i dodaj your-control.DataBindings["field-name"].WriteValue()
do kodu weryfikacji.
Niejawna i jawna walidacja
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. Zweryfikuj dane, odczytując klawisze podczas ich naciskania lub częściej, gdy użytkownik traci fokus wejściowy elementu sterującego. 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 AutoValidate. Jeśli przypiszesz EnablePreventFocusChange, anulowanie zdarzenia zapobiegnie wystąpieniu zdarzenia Validated. Fokus danych wejściowych pozostaje na bieżącej kontrolce, dopóki użytkownik nie zmieni danych na prawidłowy format. Jeśli przypisano EnableAllowFocusChange, to po anulowaniu Validated zdarzenia, zdarzenie nie nastąpi, ale uwaga nadal przemieści się na następną kontrolkę.
Przypisanie Disable do właściwości AutoValidate całkowicie zapobiega niejawnej weryfikacji. Aby zweryfikować elementy sterujące, użyj 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ę, która straciła 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 elementów sterujących
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.
Kontrola | Domyślne zachowanie walidacji |
---|---|
ContainerControl | Inherit |
Form | EnableAllowFocusChange |
PropertyGrid | Właściwość nie jest widoczna w programie Visual Studio |
ToolStripContainer | Właściwość nie jest widoczna 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 menu System>Zamknij.
- 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. Można obejść walidację i zamknąć formularz, który nadal zawiera nieprawidłowe dane, poprzez stworzenie obsługi zdarzenia dla 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 / Notatka
Jeśli wymusisz zamknięcie formularza w ten sposób, niezapisane dane 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 przejmować się zachowaniem skojarzonym z zamykaniem formularza.
Zobacz także
.NET Desktop feedback