Validierung von Benutzereingaben in Windows Forms

Wenn Benutzer in Ihrer Anwendung Daten eingeben können, sollte überprüft werden, ob die Daten gültig sind, bevor sie in der Anwendung verwendet werden. Sie können verlangen, dass bestimmte Textfelder nicht die Länge Null haben, dass ein Feld als Telefonnummer oder eine andere Art von wohlformatierten Daten formatiert wird oder dass eine Zeichenkette keine unsicheren Zeichen enthält, die zur Gefährdung der Sicherheit einer Datenbank benutzt werden könnten. Windows Forms bietet mehrere Möglichkeiten zum Überprüfen von Eingaben in einer Anwendung.

Überprüfung mit dem MaskedTextBox-Steuerelement

Wenn Sie festlegen müssen, dass Benutzer Daten in einem klar definierten Format eingeben, beispielsweise als Telefonnummer oder als Artikelnummer, können Sie dies mit dem MaskedTextBox-Steuerelement mit minimalem Programmieraufwand schnell erreichen. Eine Maske ist eine Zeichenfolge, die aus Zeichen einer Maskierungssprache besteht, mit der festgelegt wird, welche Zeichen an einer bestimmten Position in einem Textfeld eingegeben werden können. Mit dem Steuerelement werden dem Benutzer verschiedene Eingabeaufforderungen angezeigt. Wenn der Benutzer einen falschen Eintrag eingibt, also beispielsweise einen Buchstaben, obwohl er eine Ziffer eingeben müsste, wird die Eingabe vom Steuerelement automatisch abgelehnt.

Die vom MaskedTextBox verwendete Maskierungssprache ist sehr flexibel. Damit können Sie erforderliche Zeichen, optionale Zeichen, Literalzeichen wie Bindestriche und Klammern, Währungszeichen und Datumstrennzeichen angeben. Das Steuerelement kann auch gut verwendet werden, wenn es an eine Datenquelle gebunden ist. Das Format-Ereignis in einer Datenbindung kann verwendet werden, um eingehende Daten entsprechend der Maske neu zu formatieren, während das Parse-Ereignis verwendet werden kann, um ausgehende Daten entsprechend den Spezifikationen des Datenfelds neu zu formatieren.

Weitere Informationen finden Sie unter MaskedTextBox-Steuerelement.

Ereignisgesteuerte Überprüfung

Wenn Sie eine Überprüfung vollkommen programmgesteuert durchführen möchten oder eine komplexe Überprüfung durchführen müssen, sollten Sie die in den meisten Windows Forms-Steuerelementen integrierten Überprüfungsereignisse verwenden. Jedes Steuerelement, das Benutzereingaben ohne Formvorgaben unterstützt, weist ein Validating-Ereignis auf, das auftritt, wenn das Steuerelement eine Datenüberprüfung benötigt. Die Methode zur Behandlung von Validating-Ereignissen bietet verschiedene Möglichkeiten, Benutzereingaben zu überprüfen. Wenn Sie beispielsweise ein Textfeld haben, das eine Postleitzahl enthalten muss, gibt es folgende Möglichkeiten für die Überprüfung:

  • Wenn die Postleitzahl einer bestimmten Gruppe von Postleitzahlen angehören muss, kann für die Eingabe ein Zeichenfolgenvergleich durchgeführt werden, um die vom Benutzer eingegebenen Daten zu überprüfen. Wenn sich die Postleitzahl in der Gruppe {10001, 10002, 10003} befinden muss, können die Daten mit einem Zeichenfolgenvergleich überprüft werden.

  • Wenn die Postleitzahl ein bestimmtes Format aufweisen muss, können die vom Benutzer eingegebenen Daten mit regulären Ausdrücken überprüft werden. Wenn Sie beispielsweise überprüfen möchten, ob das Format ##### bzw. #####-#### verwendet wurde, können Sie den regulären Ausdruck ^(\d{5})(-\d{4})?$ verwenden. Wenn Sie überprüfen möchten, ob das Format A#A #A# verwendet wurde, können Sie den regulären Ausdruck [A-Z]\d[A-Z] \d[A-Z]\d verwenden. Weitere Informationen zu regulären Ausdrücken finden Sie unter Reguläre Ausdrücke von .NET Framework und Beispiele für reguläre Ausdrücke.

  • Wenn es sich bei der Postleitzahl um eine gültige Postleitzahl in den USA handeln muss, können Sie zum Überprüfen der vom Benutzer eingegebenen Daten einen Webdienst für Postleitzahlen aufrufen.

Das Validating-Ereignis wird als Objekt vom Typ CancelEventArgs bereitgestellt. Wenn festgestellt wird, dass die Daten des Steuerelements ungültig sind, wird das Validating-Ereignis abgebrochen, vorausgesetzt, indem die Cancel-Eigenschaft dieses Objekts auf true festgelegt wird. Wenn Sie die Cancel-Eigenschaft nicht festlegen, wird in Windows Forms davon ausgegangen, dass dieÜberprüfung für dieses Steuerelement erfolgreich war, und das Validated-Ereignis wird ausgelöst.

Ein Beispiel für Code, mit dem eine E-Mail-Adresse in einem TextBox überprüft wird, finden Sie unter Validating.

Datenbindung und ereignisgesteuerte Überprüfung

Eine Überprüfung ist nützlich, wenn Steuerelemente an eine Datenquelle wie etwa an eine Datenbanktabelle gebunden sind. Durch eine Überprüfung kann sichergestellt werden, dass die Daten eines Steuerelements das von der Datenquelle geforderte Format aufweisen und keine Sonderzeichen wie Anführungszeichen und umgekehrte Schrägstriche enthalten, die möglicherweise unsicher sind.

Bei Verwenden einer Datenbindung werden die Daten in einem Steuerelement bei der Ausführung des Validating-Ereignisses mit der Datenquelle synchronisiert. Wenn das Validating-Ereignis abgebrochen wird, werden die Daten nicht mit der Datenquelle synchronisiert.

Wichtig

Wenn nach dem Validating-Ereignis eine benutzerdefinierte Überprüfung durchgeführt wird, hat das keine Auswirkungen auf die Datenbindung. Wenn also beispielsweise die Datenbindung durch Code in einem Validated-Ereignis abgebrochen wird, wird die Datenbindung dennoch hergestellt. Um in diesem Fall die Überprüfung im Validated-Ereignis durchzuführen, ändern Sie die Eigenschaft Aktualisierungsmodus der Datenquelle des Steuerelements (unter (Datenbindungen)\(Erweitert)) von OnValidation auf Never und fügen Sie das Steuerelement.DataBindings["<IHRFELD>"].WriteValue() zu Ihrem Überprüfungscode hinzu.

Implizite und explizite Überprüfung

Wann werden die Daten eines Steuerelements überprüft? Das bestimmen Sie als Entwickler. Je nach den Anforderungen Ihrer Anwendung können Sie eine implizite oder eine explizite Überprüfung verwenden.

Implizite Überprüfung

Bei der impliziten Überprüfung werden Daten überprüft, während sie vom Benutzer eingegeben werden. Sie können die Daten bei der Eingabe in ein Steuerelement überprüfen, indem Sie die Tasten lesen, wenn sie gedrückt werden, oder, was häufiger der Fall ist, wenn der Benutzer den Eingabefokus von einem Steuerelement wegnimmt und zum nächsten wechselt. Diese Vorgehensweise ist nützlich, wenn der Benutzer direkt bei der Eingabe Feedback erhalten soll.

Wenn für ein Steuerelement die implizite Überprüfung verwendet werden soll, legen Sie die AutoValidate-Eigenschaft des Steuerelements auf EnablePreventFocusChange oder EnableAllowFocusChange fest. Das Verhalten eines Steuerelements beim Abbruch des Validating-Ereignisses wird durch den Wert bestimmt, der AutoValidate zugewiesen wird. Wenn EnablePreventFocusChange zugewiesen wird, tritt das Validated-Ereignis beim Abbruch des Ereignisses nicht auf. Der Eingabefokus bleibt auf dem aktuellen Steuerelement, bis der Benutzer die Daten zu einem gültigen Format ändert. Wenn EnableAllowFocusChange zugewiesen wird, tritt das Validated-Ereignis beim Abbruch des Ereignisses nicht auf. Der Fokus wechselt dennoch zum nächsten Steuerelement.

Wenn der AutoValidate-Eigenschaft Disable zugewiesen wird, wird die implizite Überprüfung insgesamt verhindert. Zur Überprüfung von Steuerelementen muss dann die explizite Überprüfung verwendet werden.

Explizite Überprüfung

Bei der expliziten Überprüfung werden alle Daten auf einmal überprüft. Die Daten können als Reaktion auf eine Benutzeraktion wie etwa auf das Klicken auf eine Speichern-Schaltfläche oder auf einen Weiter-Link überprüft werden. Es gibt folgende Möglichkeiten, bei einer Benutzeraktion eine explizite Überprüfung auszulösen:

  • Aufruf von Validate, um das letzte Steuerelement zu überprüfen, das den Fokus verloren hat.

  • Aufruf von ValidateChildren, um alle untergeordneten Steuerelemente in einem Formular oder Containersteuerelement zu überprüfen.

  • Aufruf einer benutzerdefinierten Methode, um die Daten in den Steuerelementen manuell zu überprüfen.

Standardmäßiges implizites Überprüfungsverhalten für Windows Forms-Steuerelemente

Für die jeweilige AutoValidate-Eigenschaft der verschiedenen Windows Forms-Steuerelemente gelten unterschiedliche Standardwerte. In der folgenden Tabelle sind die gebräuchlichsten Steuerelemente und deren Standardwerte aufgeführt.

Control Standardüberprüfungsverhalten
ContainerControl Inherit
Form EnableAllowFocusChange
PropertyGrid Eigenschaft in Visual Studio nicht verfügbar
ToolStripContainer Eigenschaft in Visual Studio nicht verfügbar
SplitContainer Inherit
UserControl EnableAllowFocusChange

Schließen des Formulars und Außerkraftsetzen der Überprüfung

Wenn ein Steuerelement den Fokus behält, weil die enthaltenen Daten ungültig sind, ist es nicht möglich, das übergeordnete Formular auf eine der üblichen Arten zu schließen:

  • Durch Klicken auf die Schaltfläche Schließen.

  • Durch Auswahl von Schließen im Menü System.

  • Durch programmgesteuertes Aufrufen der Close-Methode.

In manchen Fällen soll es jedoch möglich sein, dass der Benutzer das Formular schließen kann, ganz gleich, ob die Werte in den Steuerelementen gültig sind. In diesen Fällen kann die Überprüfung außer Kraft gesetzt und ein Formular geschlossen werden, auch wenn es ungültige Daten enthält. Dazu muss für das FormClosing-Ereignis des Formulars ein Handler erstellt werden. Im Ereignis muss die Cancel-Eigenschaft auf false festgelegt werden. Dadurch wird das Schließen des Formulars erzwungen. Weitere Informationen und ein Beispiel finden Sie unter Form.FormClosing.

Hinweis

Wenn erzwungen wird, dass das Formular auf diese Weise geschlossen wird, gehen nicht gespeicherte Daten in den Steuerelementen des Formulars verloren. Zudem wird in modalen Formularen der Inhalt von Steuerelementen beim Schließen nicht überprüft. Sie können dennoch die Überprüfung von Steuerelementen verwenden, um den Fokus auf einem Steuerelement zu sperren. Um das Verhalten beim Schließen des Formulars müssen Sie sich jedoch nicht kümmern.

Weitere Informationen