Tipp 0175 Datumsvalidierung mit der MaskedTextBox
Autor/Einsender:
Datum:
  Michael Werner
18.01.2008
Entwicklungsumgebung:   VB.Net 2005
Framework:   2.0
Die MaskedTextBox-Klasse ist ein erweitertes TextBox-Steuerelement und unterstützt eine spezielle Syntax zum Annehmen oder Ablehnen von Benutzereingaben. Mit der Mask-Eigenschaft können Eingabe geprüft werden, ohne aufwendig eine Validierungslogik schreiben zu müssen. Weiterhin prüft sie die erforderlichen Eingabezeichen, aber auch optionale Eingabezeichen und checkt den an einer angegebenen Position in der Maske erwarteten Eingabetyp, beispielsweise eine Ziffer, ein alphabetisches oder ein alphanumerisches Zeichen.
Das Steuerelement unterstützt darüber hinaus feste Vorgaben, wie z.B. Bindestriche in Telefonnummern, Währungssymbole wie den Euro (€), oder aber auch Maskenliterale für Datum- und Zeiteingaben.
In diesem Tipp wird das Ereignis TypeValidationCompleted dazu verwendet, um zu prüfen, ob ein gültiges Datum eingegeben wurde. Darüber hinaus wird in dieser Prozedur demonstriert, wie man benutzerdefiniert die Datumseingabe an weitere Bedingungen knüpfen kann. In diesem Fall werden nur zukünftige Datumseingaben akzeptiert. Das Ereignis MaskInputRejected macht eine reine Formatprüfung und tritt vor dem Ereignis TypeValidationCompleted ein. In unserem Beispiel wird hier die Zifferneingabe kontrolliert und entsprechend bei falscher Eingabe (z.B. ein Buchstabe) eine Fehlermeldung ausgegeben.
 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
     System.EventArgs) Handles MyBase.Load
  'Maskenformat festlegen: hier: Datum kurz (ohne Zeit)
  MaskedTextBox1.Mask = "00/00/0000"
End Sub

Private Sub MaskedTextBox1_TypeValidationCompleted(ByVal sender _
     As Object, ByVal e As _
     System.Windows.Forms.TypeValidationEventArgs) _
     Handles MaskedTextBox1.TypeValidationCompleted

   'Gültiges Datum?
  If (Not e.IsValidInput) Then
     MessageBox.Show("Bitte ein gültiges Datum eingeben!" & _
            vbNewLine & "Format <dd.mm.YYYY>, z.B. <01.03.2007>", _
            "Invalides Datum!")
     ElseIf (CDate(e.ReturnValue) < DateTime.Now) Then
         'Nur zukünfiges Datum zulassen
        MessageBox.Show("Bitte nur zukünftige Datumsangaben "_
             "machen!", "Nur zukünftiges Datum ist zulässig")
        e.Cancel = True
     Else
        MessageBox.Show("Ihre Eingabe wird weiterverarbeitet: " & _
            CDate(e.ReturnValue), "Danke. Ok")
        Close()
        End If
End Sub

Private Sub MaskedTextBox1_MaskInputRejected(ByVal sender As _
     System.Object, ByVal e As _
     System.Windows.Forms.MaskInputRejectedEventArgs) Handles _
     MaskedTextBox1.MaskInputRejected

  If (Me.MaskedTextBox1.MaskFull) Then
     'MessageBox.Show("Sie können keine weitere Daten eingeben!")
  ElseIf (e.Position = Me.MaskedTextBox1.Mask.Length) Then
     'MessageBox.Show("Keine weitere Dateneingabe mehr!")
  Else
     'Hinweis auf Nur Ziffern-Eingabe
    MessageBox.Show("Nur numerische Werte (Ziffern 0-9) in das "_
          "Feld eingaben.", "Nur Ziffern bitte (Datum)!")
  End If
End Sub
 
Weitere Links zum Thema
Datumsformat (länderspezifisch)
Datumsformate konvertieren (RegExp)

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (18,7 kB) Downloads bisher: [ 268 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Freitag, 20. Januar 2012