Rubrik: Datum/Zeit und Timer · Datums- und Zeit-Funktionen | VB-Versionen: VB2005, VB2008 | 28.10.08 |
Datumseingaben auf Plausibilität prüfen Eine Universalroutine zum Prüfen von Datumseingaben auf Plausibilität. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.244 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
In vielen Anwendung werden Felder für Datumseingaben benötigt. Sinnvoll ist es natürlich das Datum beim Verlassen des Eingabefeldes automatisch auf Plausibilität zu prüfen. Die Prüfung sollte zum einen das korrekte Format (tt.mm.jjjj), sowie die korrekten Angaben für Tag und Monat umfassen. Schön wäre es dann noch, wenn man auch zweistellige Jahresangaben vornehmen könnten und die Anwendung diese dann automatisch in die vierstellige Angabe umwandelt. Eine weitere Arbeitserleichterung für den Anwender wäre es auch, wenn keine Punkte eingegeben werden müssen - oder dass automatisch ein Punkt dargestellt wird, wenn man im Nummerblock der Tastatur das Komma drückt.
Der nachfolgende Tipp beherrscht alle o.g. Features und lässt sich ganz leicht in die eigene Anwendung einbinden.
Tastatureingaben prüfen
Private Sub txtDate_KeyPress(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDate.KeyPress ' aus Komma autom. Punkt machen If e.KeyChar = "," Then e.KeyChar = "." ' nur Zahlen und Punkt zulassen Select Case Asc(e.KeyChar) Case 48 To 57, 46, 8 Case Else e.Handled = True End Select End Sub
Prüfung beim Verlassen des Eingabefeldes
' Datum-Prüfroutine aufrufen Private Sub txtDate_LostFocus(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles txtDate.LostFocus ' Datumseingabe prüfen Dim sDate As String = CheckAndFormatDate(txtDate.Text) If sDate.Length > 0 Then txtDate.Text = sDate End Sub
Universelle Datum-Prüfroutine
''' <summary> ''' Datum auf Plausibilität prüfen ''' </summary> ''' <param name="Datum">Datum, das geprüft werden soll</param> ''' <returns>formatierte Datumsangabe oder Leerstring, wenn ungültiges Datum</returns> Public Function CheckAndFormatDate(ByVal Datum As String) As String Dim Result As Boolean = False Dim TT As Short = 0 Dim MM As Short = 0 Dim JJ As Short = Year(Now) Dim FormatedDate As String = "" ' Ist überhaupt ein Datum eingetragen? If Datum.Replace(".", "").Trim.Length > 0 Then ' keine Punkte im Datum vorhanden If Datum.IndexOf(".") < 0 Then ' Eingabelänge mindestens 4-stellig If Datum.Length > 3 Then TT = Val(Datum.Substring(0, 2)) MM = Val(Datum.Substring(2, 2)) If Datum.Substring(4).Trim.Length > 0 Then JJ = Val(Datum.Substring(4)) End If Result = True End If Else ' Eingabe enthält Punktangaben Dim Data() As String = Datum.Split(".") ' Tag ermitteln TT = Val(Data(0)) ' Monat ermitteln If Data.Length > 0 Then MM = Val(Data(1)) ' Jahr ermitteln If Data.Length > 1 AndAlso (Data(2).Trim.Length) > 0 Then JJ = Val(Data(2)) Result = True End If End If If Result Then ' Tag und Monat prüfen If TT > 0 And TT < 32 AndAlso MM > 0 And MM < 13 Then ' wenn Jahresangabe zweistellig ' 2000 annehmen, wenn kleiner 30 ansonsten 1900 If JJ < 100 Then JJ = IIf(JJ < 30, 2000 + JJ, 1900 + JJ) ' wenn Tag größer als maximale Anzahl Tage im angegeben Monat ' Tagesangabe korrigieren If TT > DateTime.DaysInMonth(JJ, MM) Then TT = DateTime.DaysInMonth(JJ, MM) ' wenn alles OK - Datum formatieren (tt.mm.jjjj) FormatedDate = New DateTime(JJ, MM, TT).ToString("dd.MM.yyyy") End If End If End If Return FormatedDate End Function