Ověřování uživatelského vstupu ve Windows Forms

Když uživatelé zadávají data do vaší aplikace, můžete před použitím aplikace ověřit, jestli jsou data platná. Můžete vyžadovat, aby některá textová pole neměla nulovou délku, aby pole bylo naformátované jako telefonní číslo nebo jiný typ dobře vytvořených dat nebo že řetězec neobsahuje žádné nebezpečné znaky, které by mohly být použity k ohrožení zabezpečení databáze. model Windows Forms nabízí několik způsobů, jak ověřit vstup v aplikaci.

Ověření pomocí ovládacího prvku MaskedTextBox

Pokud potřebujete, aby uživatelé zadali data v dobře definovaném formátu, jako je telefonní číslo nebo číslo části, můžete to provést rychle a s minimálním kódem pomocí MaskedTextBox ovládacího prvku. Maska je řetězec tvořený znaky z jazyka maskování, který určuje, které znaky lze zadat v libovolném místě v textovém poli. Ovládací prvek zobrazí sadu výzev uživateli. Pokud uživatel zadá nesprávnou položku, například uživatel zadá písmeno v případě potřeby číslice, ovládací prvek automaticky odmítne vstup.

Jazyk maskování, který používá MaskedTextBox , je velmi flexibilní. Umožňuje zadat požadované znaky, volitelné znaky, literální znaky, jako jsou spojovníky a závorky, znaky měny a oddělovače kalendářních dat. Ovládací prvek také funguje dobře, když je svázán se zdrojem dat. Format Událost datové vazby lze použít k přeformátování příchozích dat, aby byla v souladu s maskou, a Parse událost se dá použít k přeformátování odchozích dat tak, aby vyhovovala specifikacím datového pole.

Další informace naleznete v tématu MaskedTextBox Ovládací prvek.

Ověřování řízené událostmi

Pokud chcete mít úplnou programovou kontrolu nad ověřováním nebo potřebujete provádět složité kontroly ověření, měli byste použít ověřovací události integrované do většiny ovládacích prvků model Windows Forms. Každý ovládací prvek, který přijímá vstup uživatele volného formuláře, má Validating událost, ke které dojde, kdykoli ovládací prvek vyžaduje ověření dat. Validating V metodě zpracování událostí můžete ověřit vstup uživatele několika způsoby. Pokud máte například textové pole, které musí obsahovat PSČ, můžete ověření provést následujícími způsoby:

  • Pokud PSČ musí patřit do konkrétní skupiny PSČ, můžete na vstupu provést porovnání řetězců, abyste ověřili data zadaná uživatelem. Pokud například psč musí být v sadě {10001, 10002, 10003}, můžete k ověření dat použít porovnání řetězců.

  • Pokud psč musí být v určitém formuláři, můžete použít regulární výrazy k ověření dat zadaných uživatelem. Například k ověření formuláře ##### nebo #####-####, můžete použít regulární výraz ^(\d{5})(-\d{4})?$. K ověření formuláře A#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 psč musí být platným USA PSČ, můžete zavolat webovou službu PSČ, která ověří data zadaná uživatelem.

Událost Validating je zadán objekt typu CancelEventArgs. Pokud zjistí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íteCancel, model Windows Forms předpokládá, že ověření bylo pro tento ovládací prvek úspěšné a vyvolá Validated událost.

Příklad kódu, který ověřuje e-mailovou adresu v souboru TextBox, viz Validating.

Datové vazby a ověřování řízené událostmi

Ověření je velmi užitečné, když jste svázali ovládací prvky se zdrojem dat, jako je například tabulka databáze. Pomocí ověření můžete zajistit, aby data ovládacího prvku splňovala formát požadovaný zdrojem dat a neobsahuje žádné speciální znaky, jako jsou uvozovky a zpětné lomítka, která by mohla být nebezpečná.

Při použití datové vazby se data ve vašem ovládacím prvku synchronizují se zdrojem dat během provádění Validating události. Pokud událost zrušíte, nebudou Validating se data synchronizovat se zdrojem dat.

Důležité

Pokud máte vlastní ověření, které probíhá po Validating události, nebude mít vliv na datová vazba. Pokud například máte kód v Validated události, která se pokusí zrušit datovou vazbu, bude datová vazba stále probíhat. V tomto případě chcete provést ověření v Validated události, změnit vlastnost Režimu aktualizace zdroje dat ovládacího prvku (v části (Databindings)\(Advanced)) z OnValidation na Never a přidat Control<.DataBindings["YOURFIELD>"].WriteValue() do ověřovacího kódu.

Implicitní a explicitní ověření

Kdy se tedy ověří data ovládacího prvku? To je na vás, vývojáři. V závislosti na potřebách vaší aplikace můžete použít implicitní nebo explicitní ověření.

Implicitní ověření

Implicitní ověřování ověřuje data při jejich zadávání uživatelem. Data můžete ověřit tak, jak jsou data zadána do ovládacího prvku, a to tak, že si přečtete klávesy, které jsou stisknuté, nebo častěji, když uživatel vezme fokus vstupu od jednoho ovládacího prvku a přesune se na další. Tento přístup je užitečný, když chcete uživateli poskytnout okamžitou zpětnou vazbu k datům, když pracují.

Pokud chcete pro ovládací prvek použít implicitní ověřování, musíte vlastnost ovládacího prvku AutoValidate nastavit na EnablePreventFocusChange hodnotu nebo EnableAllowFocusChange. Pokud událost zrušíte Validating , chování ovládacího prvku bude určeno hodnotou, kterou jste přiřadili AutoValidate. Pokud jste událost přiřadili EnablePreventFocusChange, zrušení události způsobí Validated , že k události nedojde. Fokus vstupu zůstane na aktuálním ovládacím prvku, dokud uživatel nezmění data na platný vstup. Pokud jste událost přiřadili EnableAllowFocusChange, Validated při zrušení události nedojde, ale fokus se stále změní na další ovládací prvek.

Přiřazování Disable vlastnosti AutoValidate brání implicitní ověření úplně. K ověření ovládacích prvků budete muset použít explicitní ověření.

Explicitní ověření

Explicitní přístup k ověřování ověřuje data najednou. Data můžete ověřit v reakci na akci uživatele, například kliknutí na tlačítko Uložit nebo další odkaz. Když dojde k akci uživatele, můžete explicitní ověření aktivovat jedním z následujících způsobů:

  • Volání Validate pro ověření posledního ovládacího prvku, aby se ztratil fokus.

  • Volání ValidateChildren pro ověření všech podřízených ovládacích prvků ve formuláři nebo kontejneru

  • Voláním vlastní metody ověřte data v ovládacích prvcích ručně.

Výchozí implicitní chování ověřování pro ovládací prvky model Windows Forms

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í hodnoty.

Ctrl Výchozí chování ověřování
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Vlastnost není v sadě Visual Studio zpřístupněna
ToolStripContainer Vlastnost není v sadě Visual Studio zpřístupněna
SplitContainer Inherit
UserControl EnableAllowFocusChange

Zavření formuláře a přepsání ověření

Když ovládací prvek udržuje fokus, protože data, která obsahuje, jsou neplatná, 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 nabídce Systém

  • Voláním Close metody prostřednictvím kódu programu.

V některých případech ale můžete chtít, aby uživatel zavřel formulář bez ohledu na to, jestli jsou hodnoty v ovládacích prvcích platné. Ověření a zavření formuláře, který stále obsahuje neplatná data, můžete přepsat vytvořením obslužné rutiny FormClosing události formuláře. V události nastavte Cancel vlastnost na false. Tím vynutíte uzavření formuláře. Další informace a příklad najdete v tématu Form.FormClosing.

Poznámka:

Pokud vynutíte, aby se formulář tímto způsobem zavřel, dojde ke ztrátě všech dat v ovládacích prvcích formuláře, které ještě nebyly uloženy. Modální formuláře navíc neověřují obsah ovládacích prvků při jejich zavření. Ověřování ovládacích prvků můžete použít k uzamčení fokusu na ovládací prvek, ale nemusíte se zabývat chováním souvisejícím s uzavřením formuláře.

Viz také