Freigeben über


Benutzereingabeüberprüfung in Windows Forms

Wenn Benutzer Daten in Ihre Anwendung eingeben, sollten Sie überprüfen, ob die Daten gültig sind, bevor Ihre Anwendung sie verwendet. Es kann notwendig sein, dass bestimmte Textfelder nicht die Länge 0 (null) haben, ein Feld als Telefonnummer oder eine andere Art von ordnungsgemäß formatierten Daten formatiert wird oder eine Zeichenfolge keine unsicheren Zeichen enthält, die zur Gefährdung der Sicherheit einer Datenbank genutzt werden könnten. Windows Forms bietet verschiedene Möglichkeiten zum Überprüfen von Eingaben in Ihrer Anwendung.

Überprüfung mit dem MaskedTextBox-Steuerelement

Wenn Sie festlegen müssen, dass Benutzer Daten in ein klar definiertes Format eingeben, z. B. eine Telefonnummer oder eine Teilnummer, können Sie dies schnell und mit minimalem Code mithilfe des MaskedTextBox-Steuerelements 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. Das Steuerelement zeigt dem Benutzer eine Reihe von Eingabeaufforderungen an. Wenn die Benutzenden einen falschen Eintrag machen (z. B. einen Buchstaben eingeben, obwohl eine Ziffer erforderlich ist), wird die Eingabe vom Steuerelement automatisch abgelehnt.

Die von 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 funktioniert auch gut, 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 die vollständige programmgesteuerte Kontrolle über die Überprüfung benötigen oder komplexe Überprüfungen durchführen müssen, sollten Sie die in den meisten Windows Forms-Steuerelementen integrierten Überprüfungsereignisse verwenden. Jedes Steuerelement, das Freiform-Benutzereingaben akzeptiert, verfügt über ein Validating Ereignis, das immer dann auftritt, wenn das Steuerelement eine Datenüberprüfung erfordert. In der Validating-Ereignisbehandlungsmethode können Sie Benutzereingaben auf verschiedene Arten validieren. Wenn Sie beispielsweise über ein Textfeld verfügen, das eine Postleitzahl enthalten muss, können Sie die Überprüfung auf folgende Weise ausführen:

  • Wenn die Postleitzahl zu einer bestimmten Gruppe von Postleitzahlen gehören muss, können Sie einen Zeichenfolgenvergleich für die Eingabe durchführen, um die vom Benutzer eingegebenen Daten zu überprüfen. Wenn sich die Postleitzahl beispielsweise im Satz {10001, 10002, 10003} befindet, können Sie einen Zeichenfolgenvergleich verwenden, um die Daten zu überprüfen.

  • Wenn die Postleitzahl in einem bestimmten Format sein muss, können Sie reguläre Ausdrücke verwenden, um die vom Benutzer eingegebenen Daten zu validieren. Um beispielsweise das Formular ##### oder #####-####zu überprüfen, können Sie den regulären Ausdruck ^(\d{5})(-\d{4})?$verwenden. 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. 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 von den Benutzenden eingegebenen Daten einen Webdienst für Postleitzahlen aufrufen.

Das Validating-Ereignis wird als Objekt vom Typ CancelEventArgs bereitgestellt. Wenn Sie feststellen, dass die Daten des Steuerelements ungültig sind, können Sie das Validating-Ereignis abbrechen, indem Sie die Cancel Eigenschaft dieses Objekts auf truefestlegen. Wenn Sie die Cancel-Eigenschaft nicht festlegen, geht Windows Forms davon aus, dass die Überprüfung für dieses Steuerelement erfolgreich war und wird das Validated-Ereignis auslösen.

Ein Codebeispiel, mit dem eine E-Mail-Adresse in einem TextBox-Element überprüft wird, finden Sie unter Validating.

Datenbindung und ereignisgesteuerte Überprüfung

Die Überprüfung ist sehr nützlich, wenn Sie Ihre Steuerelemente an eine Datenquelle gebunden haben, z. B. eine Datenbanktabelle. Mithilfe der Überprüfung können Sie sicherstellen, dass die Daten Ihres Steuerelements dem format entsprechen, das von der Datenquelle benötigt wird, und dass es keine Sonderzeichen wie Anführungszeichen und Schrägstriche enthält, die möglicherweise unsicher sind.

Wenn Sie die Datenbindung verwenden, werden die Daten in Ihrer Steuerung während der Ausführung des Validating-Ereignisses mit der Datenquelle synchronisiert. Wenn Sie das Validating-Ereignis abbrechen, werden die Daten nicht mit der Datenquelle synchronisiert.

Wichtig

Wenn Sie über eine benutzerdefinierte Überprüfung verfügen, die nach dem Validating-Ereignis stattfindet, wirkt sich dies nicht auf die Datenbindung aus. Wenn beispielsweise Code in einem Validated-Ereignis versucht, die Datenbindung zu abzubrechen, besteht die Datenbindung weiterhin. 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? Dies liegt an Ihnen, dem Entwickler. Je nach den Anforderungen Ihrer Anwendung können Sie entweder implizite oder explizite Validierung verwenden.

Implizite Überprüfung

Der implizite Überprüfungsansatz überprüft Daten, wenn der Benutzer sie eingibt. Sie können die Daten überprüfen, während die Daten in ein Steuerelement eingegeben werden, indem Sie die Tasten lesen, während sie gedrückt werden, oder häufiger, wenn der Benutzer den Eingabefokus von einem Steuerelement wegnimmt und zum nächsten wechselt. Dieser Ansatz ist nützlich, wenn Sie dem Benutzer sofortiges Feedback zu den Daten geben möchten, während sie arbeiten.

Wenn Sie die implizite Überprüfung für ein Steuerelement verwenden möchten, müssen Sie die AutoValidate Eigenschaft dieses Steuerelements auf EnablePreventFocusChange oder EnableAllowFocusChangefestlegen. Wenn Sie das Validating-Ereignis abbrechen, wird das Verhalten des Steuerelements durch den Wert bestimmt, den Sie AutoValidatezugewiesen haben. 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

Der explizite Validierungsansatz überprüft Daten gleichzeitig. Sie können die Daten als Reaktion auf eine Benutzeraktion überprüfen, z. B. durch Klicken auf die Schaltfläche "Speichern" oder den Link "Weiter". Wenn die Benutzeraktion auftritt, können Sie die explizite Überprüfung auf eine der folgenden Arten auslösen:

  • Rufen Sie Validate auf, um das letzte Steuerelement zu validieren, das den Fokus verloren hat.

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

  • Rufen Sie eine benutzerdefinierte Methode auf, um die Daten in den Steuerelementen manuell zu überprüfen.

Standardverhalten für implizite Überprüfung 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 am häufigsten verwendeten Steuerelemente und deren Standardwerte aufgeführt.

Steuerung 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 einigen Fällen möchten Sie es dem Benutzer jedoch möglicherweise ermöglichen, das Formular zu schließen, unabhängig davon, ob die Werte in den Steuerelementen gültig sind. Sie können die Überprüfung außer Kraft setzen und ein Formular schließen, das weiterhin ungültige Daten enthält, indem Sie einen Handler für das FormClosing-Ereignis des Formulars erstellen. Legen Sie in diesem Fall die Cancel-Eigenschaft auf false fest. Dadurch wird das Schließen des Formulars erzwungen. Weitere Informationen und ein Beispiel finden Sie unter Form.FormClosing.

Anmerkung

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. Darüber hinaus überprüfen modale Formulare den Inhalt von Steuerelementen nicht, wenn sie geschlossen werden. 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 keine Gedanken machen.

Siehe auch