Ověřování uživatelského vstupu ve Windows Forms
Když uživatelé zadávají do aplikace data, možná budete chtít ověřit, že jsou data platná, než je aplikace použije. Můžete vyžadovat, aby určitá textová pole nebyla nulová, aby pole bylo formátováno jako telefonní číslo nebo jiný typ dat ve správném formátu, nebo aby řetězec neobsahoval žádné nezabezpečené znaky, které by bylo možné použít k ohrožení zabezpečení databáze. model Windows Forms poskytuje několik způsobů, jak ověřit vstup ve vaší aplikaci.
Ověřování pomocí ovládacího prvku ovládacím MaskedTextBox
Pokud potřebujete, aby uživatelé mohli zadat data ve správném formátu, jako je telefonní číslo nebo číslo součásti, můžete to provést rychle a s minimálním kódem MaskedTextBox pomocí ovládacího prvku. Maska je řetězec tvořený znaky z maskující jazyk, který určuje, které znaky lze zadat v libovolné pozici v textovém poli. Ovládací prvek zobrazí sadu výzev pro uživatele. Pokud uživatel zadá nesprávnou položku, například uživatel zadá písmeno, pokud je požadována číslice, ovládací prvek automaticky zamítne vstup.
Jazyk maskování, který je používán nástrojem MaskedTextBox , je velmi flexibilní. Umožňuje zadat požadované znaky, volitelné znaky, literálové znaky, například spojovníky a závorky, znaky měny a oddělovače dat. Ovládací prvek také funguje dobře, pokud je svázán se zdrojem dat. FormatUdálost na datové vazbě se dá použít k přeformátování příchozích dat tak, aby odpovídala masce, a Parse událost lze použít k přeformátování odchozích dat tak, aby splňovala specifikace datového pole.
Další informace naleznete v tématu ovládacím MaskedTextBox Control.
Ověřování Event-Driven
pokud chcete úplnou programovou kontrolu nad ověřením nebo potřebujete provést komplexní kontroly ověřování, měli byste použít události ověřování integrované do většiny model Windows Formsch ovládacích prvků. Každý ovládací prvek, který přijímá vstup uživatele volné formy, má Validating událost, ke které dojde pokaždé, když ovládací prvek vyžaduje ověření dat. ValidatingV metodě zpracování událostí můžete ověřit vstup uživatele několika způsoby. Například pokud máte textové pole, které musí obsahovat poštovní směrovací číslo, můžete provést ověřování následujícími způsoby:
Pokud poštovní směrovací číslo musí patřit do konkrétní skupiny PSČ, můžete provést porovnání řetězců u vstupu a ověřit data zadaná uživatelem. Pokud například poštovní směrovací číslo musí být v sadě {10001, 10002, 10003}, můžete použít porovnání řetězců k ověření dat.
Pokud poštovní směrovací číslo musí být v konkrétním formuláři, můžete použít regulární výrazy k ověření dat zadaných uživatelem. Například pro ověření formuláře
#####nebo#####-####, můžete použít regulární výraz^(\d{5})(-\d{4})?$. K ověření formulářeA#A #A#můžete použít regulární výraz[A-Z]\d[A-Z] \d[A-Z]\d. další informace o regulárních výrazech naleznete v tématu .NET Framework regulární výrazy a příklady regulárních výrazů.Pokud poštovní směrovací číslo musí být platným USA PSČ, mohli byste zavolat webovou službu ZIP Code k ověření dat zadaných uživatelem.
ValidatingUdálost je poskytován objekt typu CancelEventArgs . Pokud určíte, že data ovládacího prvku nejsou platná, můžete událost zrušit Validating nastavením vlastnosti tohoto objektu Cancel na true . pokud vlastnost nenastavíte Cancel , model Windows Forms bude předpokládat, že ověření pro daný ovládací prvek proběhlo úspěšně, a vyvolat Validated událost.
Příklad kódu, který ověřuje e-mailovou adresu v TextBox , naleznete v tématu Validating .
Ověřování datových vazeb a Event-Driven
Ověřování je velmi užitečné, pokud jste ovládací prvky navázány na zdroj dat, například databázovou tabulku. Pomocí ověřování se můžete ujistit, že data ovládacího prvku vyhovují formátu požadovanému zdrojem dat a že neobsahuje žádné speciální znaky, jako jsou například uvozovky a zpětná lomítka, která mohou být nebezpečná.
Když použijete datovou vazbu, data v ovládacím prvku budou synchronizována se zdrojem dat během provádění Validating události. Pokud událost zrušíte Validating , data nebudou synchronizovaná se zdrojem dat.
Důležité
Pokud máte vlastní ověření, které se provede po Validating události, nebude to mít vliv na datovou vazbu. Například pokud máte kód v Validated události, která se pokusí zrušit datovou vazbu, bude stále k dispozici datová vazba. V takovém případě pro provedení ověření v Validated události změňte vlastnost režim aktualizace zdroje dat ovládacího prvku (v části (DataBindings)\(rozšířené)) z možnosti- Valid na nikdya přidejte do ověřovacího kóduYOURFIELD > ovládacího prvku <.DataBindings[" . "].WriteValue()
Implicitní a explicitní ověřování
Takže když se data ovládacího prvku ověřují? To je u vás vývojářem. V závislosti na potřebách vaší aplikace můžete použít buď implicitní, nebo explicitní ověřování.
Implicitní ověřování
Přístup implicitního ověřování ověří data, jakmile je uživatel zadá. Data můžete ověřit při zadávání dat do ovládacího prvku tak, že je přečtete při stisknutí klávesy nebo častěji, kdykoli uživatel převezme fokus vstupu z jednoho ovládacího prvku a přejde na další. Tento přístup je užitečný, když chcete uživateli poskytnout okamžitou zpětnou vazbu k datům při jejich práci.
Pokud chcete použít implicitní ověřování pro ovládací prvek, musíte nastavit vlastnost tohoto ovládacího prvku AutoValidate na EnablePreventFocusChange nebo EnableAllowFocusChange . Pokud událost zrušíte Validating , chování ovládacího prvku bude určeno podle hodnoty, kterou jste přiřadili AutoValidate . Pokud jste přiřadili EnablePreventFocusChange , zrušení události způsobí, že Validated nedojde k události. Vstupní fokus zůstane na aktuálním ovládacím prvku, dokud uživatel nezmění data na platný vstup. Pokud jste přidělili EnableAllowFocusChangeValidated událost, k události nedojde při zrušení, ale fokus se stále změní na další ovládací prvek.
Přiřazení Disable k AutoValidate vlastnosti zabraňuje implicitnímu ověřování zcela. Chcete-li ověřit ovládací prvky, budete muset použít explicitní ověřování.
Explicitní ověření
Přístup explicitního ověřování ověřuje data najednou. Můžete ověřit data v reakci na akci uživatele, například kliknutím na tlačítko Uložit nebo na další odkaz. Když dojde k akci uživatele, můžete spustit explicitní ověřování jedním z následujících způsobů:
Volá Validate se, aby se ověřilo, že poslední ovládací prvek ztratil fokus.
Zavolejte ValidateChildren k ověření všech podřízených ovládacích prvků ve formuláři nebo v ovládacím prvku kontejneru.
Zavolejte vlastní metodu pro ověření dat v ovládacích prvcích ručně.
výchozí implicitní chování ověřování pro model Windows Forms ovládací prvky
různé ovládací prvky model Windows Forms mají pro svou AutoValidate vlastnost jiné výchozí hodnoty. Následující tabulka uvádí nejběžnější ovládací prvky a jejich výchozí nastavení.
| Řízení | Výchozí chování ověřování |
|---|---|
| ContainerControl | Inherit |
| Form | EnableAllowFocusChange |
| PropertyGrid | Vlastnost není vystavena v Visual Studio |
| ToolStripContainer | Vlastnost není vystavena v Visual Studio |
| SplitContainer | Inherit |
| UserControl | EnableAllowFocusChange |
Zavření formuláře a přepsání ověřování
Když ovládací prvek zachová fokus, protože data, která obsahuje, nejsou platná, není možné zavřít nadřazený formulář jedním z obvyklých způsobů:
Kliknutím na tlačítko Zavřít .
Výběrem možnosti Zavřít v systémové nabídce.
Voláním Close metody prostřednictvím kódu programu.
V některých případech však můžete chtít uživateli nechat formulář zavřít bez ohledu na to, zda jsou hodnoty v ovládacích prvcích platné. Můžete přepsat ověřování a zavřít formulář, který stále obsahuje neplatná data, vytvořením obslužné rutiny pro událost formuláře FormClosing . V případě události nastavte Cancel vlastnost na false hodnotu. Tím se formulář vynutí zavřít. Další informace a příklad naleznete v tématu Form.FormClosing .
Poznámka
Pokud vynutíte zavření formuláře tímto způsobem, ztratí se všechna data v ovládacích prvcích formuláře, které ještě nebyly uloženy. Kromě toho modální formuláře neověřují obsah ovládacích prvků, když jsou zavřeny. K uzamknutí fokusu na ovládací prvek můžete stále používat ověřování ovládacího prvku, ale nemusíte mít obavy o chování spojené s zavřením formuláře.