Ověřování vstupu uživatele 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. 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í ovládacího prvku MaskedTextBox. maska je řetězec tvořený znaky z maskovacího jazyka, který určuje, které znaky je možné zadat na libovolnou pozici 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í používaný 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. Událost Format datové vazby lze použít k přeformátování příchozích dat tak, aby byla v souladu s maskou, a událost Parse lze použít k přeformátování odchozích dat tak, aby vyhovovala specifikacím datového pole.
Další informace naleznete v části ovládací prvek MaskedTextBox.
Event-Driven Ověřování
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ů Windows Forms. Každý ovládací prvek, který přijímá vstup uživatele ve volném formuláři, má Validating událost, která nastane, kdykoli ovládací prvek vyžaduje ověření dat. V metodě zpracování událostí Validating můžete uživatelský vstup ověřit 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. Například, pokud musí být poštovní směrovací číslo v sadě {10001, 10002, 10003}, můžete použít porovnání řetězců k ověření těchto údajů.
Pokud musí mít PSČ specifický formát, můžete použít regulární výrazy k ověření dat zadaných uživatelem. Chcete-li například ověřit
#####
formuláře nebo#####-####
, můžete použít regulární výraz^(\d{5})(-\d{4})?$
. K ověřeníA#A #A#
formuláře 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 regulární výrazy rozhraní .NET Framework a příklady regulárních výrazů.Pokud poštovní směrovací číslo musí být platným poštovním směrovacím číslem ve Spojených státech, mohli byste zavolat webovou službu poštovního směrovacího čísla k ověření údajů zadaných uživatelem.
Události Validating je přiřazen objekt typu CancelEventArgs. Pokud zjistíte, že data ovládacího prvku nejsou platná, můžete událost Validating zrušit nastavením vlastnosti Cancel tohoto objektu na true
. Pokud nenastavíte vlastnost Cancel, 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 TextBox, viz Validating.
Datová vazba a ověřování Event-Driven
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í události Validating. Pokud zrušíte událost Validating, nebudou se data synchronizovat se zdrojem dat.
Důležitý
Pokud probíhá vaše vlastní ověření po události Validating, nebude to mít vliv na datové vazby. Pokud například máte kód v události Validated, která se pokusí zrušit datovou vazbu, datová vazba bude stále probíhat. Chcete-li provést ověření v události
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í, je nutné nastavit vlastnost AutoValidate ovládacího prvku na EnablePreventFocusChange nebo EnableAllowFocusChange. Pokud zrušíte událost Validating, bude chování ovládacího prvku určeno hodnotou, kterou jste přiřadili AutoValidate. Pokud jste přiřadili EnablePreventFocusChange, zrušení události způsobí, že k události Validated nedojde. Fokus vstupu zůstane na aktuálním ovládacím prvku, dokud uživatel nezmění data na platný vstup. Pokud přiřadíte EnableAllowFocusChange, událost Validated neproběhne, když ji zrušíte, ale zaměření se stále přesune na další ovládací prvek.
Přiřazení Disable vlastnosti AutoValidate zcela brání implicitnímu ověření. 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ím Validate ověřte, ž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 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 Windows Forms
Různé ovládací prvky Windows Forms mají pro vlastnost AutoValidate různé výchozí hodnoty. Následující tabulka uvádí nejběžnější ovládací prvky a jejich výchozí hodnoty.
Řízení | 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 Zavřít v nabídce Systém.
Voláním metody Close programově.
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 pro událost FormClosing formuláře. V případě nastavte vlastnost Cancel 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 zamknutí fokusu na ovládací prvek, ale nemusíte si dělat starosti s chováním, které je spojeno s uzavřením formuláře.
Viz také
.NET Desktop feedback