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 Dieser Tipp wurde bereits 13.441 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevPopUp 2.0 Dynamische Kontextmenüs! Erstellen Sie mit nur wenigen Zeilen Code Kontextmenüs dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP, Vista oder Windows 8) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats November 2024 Dieter Otter WAVE-Dateien aufnehmen Ein Code-Ausschnitt, mit dem sich WAVE-Dateien in verschiedenen Aufnahmequalitäten aufnehmen lassen. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |