Validierung von Benutzereingaben in Windows FormsUser Input Validation in Windows Forms

Wenn Benutzerdaten in die Anwendung eingeben, sollten Sie überprüfen, ob die Daten gültig sind, bevor Sie von Ihrer Anwendung verwendet werden.When users enter data into your application, you may want to verify that the data is valid before your application uses it. Möglicherweise ist es erforderlich, dass bestimmte Textfelder nicht die Länge 0 (null) aufweisen, dass ein Feld als Telefonnummer oder anderer Typ von wohlgeformten Daten formatiert wird, oder dass eine Zeichenfolge keine unsicheren Zeichen enthält, die zum kompromittieren der Sicherheit einer Datenbank verwendet werden können.You may require that certain text fields not be zero-length, that a field be formatted as a telephone number or other type of well-formed data, or that a string not contain any unsafe characters that could be used to compromise the security of a database. Windows Forms bietet mehrere Möglichkeiten zum Überprüfen von Eingaben in Ihrer Anwendung.Windows Forms provides several ways for you to validate input in your application.

Validierung mit dem MaskedTextBox-SteuerelementValidation with the MaskedTextBox Control

Wenn Sie möchten, dass Benutzerdaten in einem klar definierten Format (z. b. eine Telefonnummer oder eine Teilenummer) eingeben, können Sie dies schnell und mit minimalem Code erreichen, indem Sie das MaskedTextBox Steuerelement verwenden.If you need to require users to enter data in a well-defined format, such as a telephone number or a part number, you can accomplish this quickly and with minimal code by using the MaskedTextBox control. Eine Maske ist eine Zeichenfolge, die aus Zeichen aus einer Maskierungs Sprache besteht, die angibt, welche Zeichen an einer beliebigen Position im Textfeld eingegeben werden können.A mask is a string made up of characters from a masking language that specifies which characters can be entered at any given position in the text box. Das-Steuerelement zeigt dem Benutzer eine Reihe von Eingabe Aufforderungen an.The control displays a set of prompts to the user. Wenn der Benutzer einen falschen Eintrag eingibt, z. b. wenn der Benutzer einen Buchstaben eingibt, wenn eine Ziffer erforderlich ist, lehnt das Steuerelement die Eingabe automatisch ab.If the user types an incorrect entry, for example, the user types a letter when a digit is required, the control will automatically reject the input.

Die von MaskedTextBox verwendete Maskierungs Sprache ist sehr flexibel.The masking language that is used by MaskedTextBox is very flexible. Sie ermöglicht das Angeben von erforderlichen Zeichen, optionalen Zeichen, Literalzeichen, z. b. Bindestrichen und Klammern, Währungszeichen und Datums Trennzeichen.It allows you to specify required characters, optional characters, literal characters, such as hyphens and parentheses, currency characters, and date separators. Das-Steuerelement funktioniert auch gut, wenn es an eine Datenquelle gebunden ist.The control also works well when bound to a data source. Das Format-Ereignis für eine Datenbindung kann verwendet werden, um eingehende Daten zur Einhaltung der Maske neu zu formatieren, und das Parse Ereignis kann verwendet werden, um ausgehende Daten neu zu formatieren, sodass Sie den Spezifikationen des Daten Felds entsprechen.The Format event on a data binding can be used to reformat incoming data to comply with the mask, and the Parse event can be used to reformat outgoing data to comply with the specifications of the data field.

Weitere Informationen finden Sie unter MaskedTextBox-SteuerElement.For more information, see MaskedTextBox Control.

Ereignisgesteuerte ValidierungEvent-Driven Validation

Wenn Sie die vollständige programmgesteuerte Kontrolle über die Validierung benötigen oder komplexe Validierungs Überprüfungen durchführen möchten, sollten Sie die in den meisten Windows Forms Steuerelementen integrierten Validierungs Ereignisse verwenden.If you want full programmatic control over validation, or need to perform complex validation checks, you should use the validation events built into most Windows Forms controls. Jedes Steuerelement, das eine Freiform-Benutzereingabe akzeptiert, verfügt über ein Validating Ereignis, das auftritt, wenn das Steuerelement eine Datenvalidierung erfordert.Each control that accepts free-form user input has a Validating event that will occur whenever the control requires data validation. In der Ereignis Behandlungsmethode Validating können Sie Benutzereingaben auf verschiedene Weise überprüfen.In the Validating event-handling method, you can validate user input in several ways. Wenn Sie z. b. ein Textfeld haben, das eine Postleitzahl enthalten muss, können Sie die Überprüfung wie folgt ausführen:For example, if you have a text box that must contain a postal code, you can perform the validation in the following ways:

  • Wenn die Postleitzahl einer bestimmten Gruppe von Postleitzahlen angehören muss, können Sie einen Zeichen folgen Vergleich mit der Eingabe durchführen, um die vom Benutzer eingegebenen Daten zu überprüfen.If the postal code must belong to a specific group of zip codes, you can perform a string comparison on the input to validate the data entered by the user. Wenn die Postleitzahl beispielsweise im Satz {10001, 10002, 10003} sein muss, können Sie einen Zeichen folgen Vergleich verwenden, um die Daten zu validieren.For example, if the postal code must be in the set {10001, 10002, 10003}, then you can use a string comparison to validate the data.

  • Wenn die Postleitzahl in einer bestimmten Form vorliegen muss, können Sie reguläre Ausdrücke verwenden, um die vom Benutzer eingegebenen Daten zu validieren.If the postal code must be in a specific form you can use regular expressions to validate the data entered by the user. Um z. b. das Formular ##### oder #####-####zu validieren, können Sie den regulären Ausdruck ^(\d{5})(-\d{4})?$verwenden.For example, to validate the form ##### or #####-####, you can use the regular expression ^(\d{5})(-\d{4})?$. Um das Formular A#A #A#zu überprüfen, können Sie den regulären Ausdruck [A-Z]\d[A-Z] \d[A-Z]\dverwenden.To validate the form A#A #A#, you can use the regular expression [A-Z]\d[A-Z] \d[A-Z]\d. Weitere Informationen zu regulären Ausdrücken finden Sie unter .NET Framework reguläre Ausdrücke und Beispiele für reguläreAusdrücke.For more information about regular expressions, see .NET Framework Regular Expressions and Regular Expression Examples.

  • Wenn die Postleitzahl ein gültiger USA ZIP-Code sein muss, können Sie einen Postleitzahl-Webdienst zum Überprüfen der vom Benutzer eingegebenen Daten abrufen.If the postal code must be a valid United States Zip code, you could call a Zip code Web service to validate the data entered by the user.

Das Validating-Ereignis wird als Objekt des Typs CancelEventArgsbereitgestellt.The Validating event is supplied an object of type CancelEventArgs. Wenn Sie feststellen, dass die Daten des Steuer Elements nicht gültig sind, können Sie das Validating Ereignis abbrechen, indem Sie die Cancel-Eigenschaft dieses Objekts auf truefestlegen.If you determine that the control's data is not valid, you can cancel the Validating event by setting this object's Cancel property to true. Wenn Sie die Cancel-Eigenschaft nicht festlegen, wird von Windows Forms angenommen, dass die Überprüfung für dieses Steuerelement erfolgreich war, und es wird das Validated-Ereignis angehoben.If you do not set the Cancel property, Windows Forms will assume that validation succeeded for that control, and raise the Validated event.

Ein Codebeispiel, in dem eine e-Mail-Adresse in einem TextBoxüberprüft wird, finden Sie unter Validating.For a code example that validates an email address in a TextBox, see Validating.

Datenbindung und ereignisgesteuerte ValidierungData Binding and Event-Driven Validation

Die Überprüfung ist sehr nützlich, wenn Sie Ihre Steuerelemente an eine Datenquelle gebunden haben, z. b. eine Datenbanktabelle.Validation is very useful when you have bound your controls to a data source, such as a database table. Mithilfe der Validierung können Sie sicherstellen, dass die Daten des Steuer Elements das für die Datenquelle erforderliche Format erfüllen und keine Sonderzeichen wie Anführungszeichen und hinterstriche enthalten, die möglicherweise unsicher sind.By using validation, you can make sure that your control's data satisfies the format required by the data source, and that it does not contain any special characters such as quotation marks and back slashes that might be unsafe.

Wenn Sie die Datenbindung verwenden, werden die Daten im-Steuerelement während der Ausführung des Validating Ereignisses mit der Datenquelle synchronisiert.When you use data binding, the data in your control is synchronized with the data source during execution of the Validating event. Wenn Sie das Validating Ereignis abbrechen, werden die Daten nicht mit der Datenquelle synchronisiert.If you cancel the Validating event, the data will not be synchronized with the data source.

Wichtig

Wenn Sie über eine benutzerdefinierte Validierung verfügen, die nach dem Validating-Ereignis erfolgt, wirkt sich dies nicht auf die Datenbindung aus.If you have custom validation that takes place after the Validating event, it will not affect the data binding. Wenn Sie z. b. Code in einem Validated-Ereignis haben, das versucht, die Datenbindung abzubrechen, wird die Datenbindung weiterhin ausgeführt.For example, if you have code in a Validated event that attempts to cancel the data binding, the data binding will still occur. Ändern Sie in diesem Fall die Eigenschaft Datenquellen-Aktualisierungs Modus des Steuer Elements (unter (DataBindings) \ (erweitert) ) von OnValidation in Never, und fügen Sie dem Validierungscode.DataBindings[" <yourfield > "].WriteValue() hinzu, um die Validierung im Validated-Ereignis auszuführen.In this case, to perform validation in the Validated event, change the control's Data Source Update Mode property (under (Databindings)\ (Advanced)) from OnValidation to Never, and add Control.DataBindings["<YOURFIELD>"].WriteValue() to your validation code.

Implizite und explizite ValidierungImplicit and Explicit Validation

Wann werden die Daten eines Steuer Elements überprüft?So when does a control's data get validated? Dies ist der Entwickler.This is up to you, the developer. Abhängig von den Anforderungen Ihrer Anwendung können Sie entweder implizite oder explizite Validierung verwenden.You can use either implicit or explicit validation, depending on the needs of your application.

Implizite ValidierungImplicit Validation

Bei der impliziten Überprüfung werden Daten überprüft, während Sie vom Benutzer eingegeben werden.The implicit validation approach validates data as the user enters it. Sie können die Daten überprüfen, wenn die Daten in einem-Steuerelement eingegeben werden, indem Sie die Tasten lesen, wenn Sie gedrückt werden, oder häufiger, wenn der Benutzer den Eingabefokus von einem Steuerelement entfernt und zum nächsten wechselt.You can validate the data as the data is entered in a control by reading the keys as they are pressed, or more commonly whenever the user takes the input focus away from one control and moves to the next. Diese Vorgehensweise ist nützlich, wenn Sie dem Benutzer umgehend Feedback zu den Daten geben möchten, während diese funktionieren.This approach is useful when you want to give the user immediate feedback about the data as they are working.

Wenn Sie die implizite Validierung für ein Steuerelement verwenden möchten, müssen Sie die AutoValidate-Eigenschaft dieses Steuer Elements auf EnablePreventFocusChange oder EnableAllowFocusChangefestlegen.If you want to use implicit validation for a control, you must set that control's AutoValidate property to EnablePreventFocusChange or EnableAllowFocusChange. Wenn Sie das Validating Ereignis abbrechen, wird das Verhalten des Steuer Elements durch den Wert bestimmt, den Sie AutoValidatezugewiesen haben.If you cancel the Validating event, the behavior of the control will be determined by what value that you assigned to AutoValidate. Wenn Sie EnablePreventFocusChangezugewiesen haben, bewirkt das Abbrechen des Ereignisses, dass das Validated-Ereignis nicht stattfindet.If you assigned EnablePreventFocusChange, canceling the event will cause the Validated event not to occur. Der Eingabefokus bleibt auf dem aktuellen Steuerelement, bis der Benutzer die Daten in eine gültige Eingabe ändert.Input focus will remain on the current control until the user changes the data to a valid input. Wenn Sie EnableAllowFocusChangezugewiesen haben, tritt das Validated Ereignis nicht auf, wenn Sie das Ereignis abbrechen, aber der Fokus wird weiterhin auf das nächste Steuerelement geändert.If you assigned EnableAllowFocusChange, the Validated event will not occur when you cancel the event, but focus will still change to the next control.

Durch das Zuweisen von Disable zur AutoValidate Eigenschaft wird die implizite Validierung vollständig verhindert.Assigning Disable to the AutoValidate property prevents implicit validation altogether. Zum Überprüfen der Steuerelemente müssen Sie die explizite Validierung verwenden.To validate your controls, you will have to use explicit validation.

Explizite ValidierungExplicit Validation

Bei der expliziten Überprüfung werden Daten gleichzeitig überprüft.The explicit validation approach validates data at one time. Sie können die Daten als Reaktion auf eine Benutzeraktion überprüfen, z. b. durch Klicken auf die Schaltfläche Speichern oder einen nächsten Link.You can validate the data in response to a user action, such as clicking a Save button or a Next link. Wenn die Benutzeraktion auftritt, können Sie eine explizite Validierung auf eine der folgenden Arten ausführen:When the user action occurs, you can trigger explicit validation in one of the following ways:

  • Ruft Validate auf, um zu überprüfen, ob das letzte Steuerelement den Fokus verliert.Call Validate to validate the last control to have lost focus.

  • Ruft ValidateChildren auf, um alle untergeordneten Steuerelemente in einem Formular oder Container Steuerelement zu überprüfenCall ValidateChildren to validate all child controls in a form or container control.

  • Ruft eine benutzerdefinierte Methode auf, um die Daten in den Steuerelementen manuell zu validieren.Call a custom method to validate the data in the controls manually.

Standardmäßiges implizites Validierungs Verhalten für Windows Forms SteuerelementeDefault Implicit Validation Behavior for Windows Forms Controls

Verschiedene Windows Forms Steuerelemente haben unterschiedliche Standardwerte für Ihre AutoValidate-Eigenschaft.Different Windows Forms controls have different defaults for their AutoValidate property. In der folgenden Tabelle werden die gängigsten Steuerelemente und deren Standardwerte angezeigt.The following table shows the most common controls and their defaults.

ControlControl Standard Validierungs VerhaltenDefault Validation Behavior
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Eigenschaft nicht verfügbar in Visual StudioProperty not exposed in Visual Studio
ToolStripContainer Eigenschaft nicht verfügbar in Visual StudioProperty not exposed in Visual Studio
SplitContainer Inherit
UserControl EnableAllowFocusChange

Schließen des Formulars und Überschreiben der ValidierungClosing the Form and Overriding Validation

Wenn ein Steuerelement den Fokus erhält, weil die darin enthaltenen Daten ungültig sind, ist es nicht möglich, das übergeordnete Formular auf eine der üblichen Arten zu schließen:When a control maintains focus because the data it contains is invalid, it is impossible to close the parent form in one of the usual ways:

  • Durch Klicken auf die Schaltfläche Schließen .By clicking the Close button.

  • Durch Auswählen von Schließen im Menü System .By selecting Close in the System menu.

  • Durch das programmgesteuerte Aufrufen der Close-Methode.By calling the Close method programmatically.

In einigen Fällen möchten Sie jedoch möglicherweise, dass der Benutzer das Formular schließt, unabhängig davon, ob die Werte in den Steuerelementen gültig sind.However, in some cases, you might want to let the user close the form regardless of whether the values in the controls are valid. Sie können die Überprüfung überschreiben und ein Formular schließen, das noch ungültige Daten enthält, indem Sie einen Handler für das FormClosing-Ereignis des Formulars erstellen.You can override validation and close a form that still contains invalid data by creating a handler for the form's FormClosing event. Legen Sie im-Ereignis die Cancel-Eigenschaft auf falsefest.In the event, set the Cancel property to false. Dadurch muss das Formular geschlossen werden.This forces the form to close. Weitere Informationen und ein Beispiel finden Sie unter Form.FormClosing.For more information and an example, see Form.FormClosing.

Hinweis

Wenn Sie erzwingen, dass das Formular auf diese Weise geschlossen wird, gehen alle Daten in den Steuerelementen des Formulars, die noch nicht gespeichert wurden, verloren.If you force the form to close in this manner, any data in the form's controls that has not already been saved is lost. Außerdem überprüfen modale Formulare nicht den Inhalt von Steuerelementen, wenn Sie geschlossen werden.In addition, modal forms do not validate the contents of controls when they are closed. Sie können die Steuerelement Validierung weiterhin verwenden, um den Fokus auf ein Steuerelement zu sperren, aber Sie müssen sich nicht um das Verhalten im Zusammenhang mit dem Schließen des Formulars kümmern.You can still use control validation to lock focus to a control, but you do not have to be concerned about the behavior associated with closing the form.

Weitere InformationenSee also