Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.
Das DatePicker-Steuerelement
Für die Eingabe von Datumsangaben gibt es unter WPF ein spezielles Steuerelement – das sogenannte DatePicker-Control. Es ist recht schlicht gehalten, bietet aber eine gute und zuverlässige Möglichkeit, Datumsangaben schnell auszuwählen. Da es ein spezialisiertes Steuerelement ist, offeriert es jedoch auch einige individuelle Attribute, die Sie kennen sollten, um das Element effizient zu nutzen. Anderenfalls kommt es schnell zu Problemen ...
In einer Datenbankanwendung ist die Wahrscheinlichkeit sehr hoch, dass Sie früher oder später Datumsangaben eingeben müssen. Unter Access wurde für Felder, die auf einem Datumsfeld basierten, ein Textfeld angelegt, das beim Fokuserhalt eine Schaltfläche zum Öffnen eines kleinen Popups zur Datumsauswahl präsentierte. Bei dem DatePicker-Steuerelement von WPF ist diese kleine Schaltfläche immer sichtbar, sodass der Benutzer direkt weiß, dass er bei der Datumseingabe Unterstützung findet. Ein DatePicker-Element ist schnell hinzufügt – entweder über die ToolBox, wo es unter Alle WPF-Steuerelemente zu finden ist oder durch das Hinzufügen eines neuen Elements des Typs DatePicker zum XAML-Code – im einfachsten Fall wie folgt:
<DatePicker />
Das Steuerelement sieht dann im Entwurf wie in Bild 1 aus.
Bild 1: Das DatePicker-Element in der Entwurfsansicht
Wenn Sie die Anwendung starten, liefert das DatePicker-Steuerelement den Text Datum auswählen. Ein Klick auf die Schaltfläche rechts neben dem Eingabefeld zeigt dann ein Popup mit der Ansicht des aktuellen Monats an (siehe Bild 2).
Bild 2: Das DatePicker-Element in AktionBesondere Eigenschaften des DatePicker-Elements
Das DatePicker-Element liefert einige Eigenschaften, die für die Programmierung interessant sind.
- SelectedDateChanged: Diese Ereignis wird ausgelöst, wenn sich der Wert des Datums ändert.
- IsDropDownOpen: Gibt den aktuellen Zustand des Kalender-Popups wieder und erlaubt auch die Einstellung der Eigenschaft.
- SelectedDateFormat: Gibt das angezeigte Datumsformat aus.
- CalendarOpened: Wird ausgelöst, wenn der Kalender geöffnet wird.
- CalendarClosed: Wird ausgelöst, wenn der Kalender geschlossen wird.
- DateValidationError: Wird ausgelöst, wenn ein ungültiges Datum eingegeben wird.
Ereignis beim Ändern des Datums
Wenn der Benutzer das Datum im DatePicker-Element anpasst, löst er damit das Ereignis SelectedDateChanged aus, welches wir mit der folgenden Methode implementieren können. Das neue Datum wird dann in einem Meldungsfenster angezeigt:
Private Sub dpDatepicker_SelectedDateChanged(sender As Object, e As SelectionChangedEventArgs)
Dim datePicker As DatePicker
datePicker = sender
MessageBox.Show("Das neue Datum lautet: " + datePicker.Text)
End Sub
Zuvor legen wir das Attribut für das DatePicker-Element wie folgt an:
<DatePicker x:Name="dpDatepicker" SelectedDateChanged="DatePicker_SelectedDateChanged"></DatePicker>
Datumsformat ermitteln
Die MessageBox der obigen Ereignismethode können wir noch erweitern. Sie soll nun auch noch das Format des angezeigten Datums ausgeben:
MessageBox.Show("Das neue Datum lautet: " + datePicker.Text + vbCrLf + "und hat das Format: " + datePicker.SelectedDateFormat.ToString)
Mögliche Werte sind Short und Long – hier mit Beispielen:
- Short: 15.02.2018
- Long: Donnerstag, 15. Februar 2018
Kalender per Code aufklappen
Vielleicht möchten Sie den Kalender automatisch aufklappen – zum Beispiel, wenn sich das Fenster öffnet oder wenn der Benutzer ein ungültiges Datum eingegeben hat. Dann können Sie die Eigenschaft IsDropDownOpen nutzen. Diese liefert sowohl den aktuellen Zustand als auch die Möglichkeit, den Zustand durch Zuweisen eines Boolean-Wertes zu ändern. Die Schaltfläche, die wir im Fenster neben dem DatePicker untergebracht haben, macht genau das – sie klappt den Kalender auf:
Private Sub btnKalenderAnzeigen_Click(sender As Object, e As RoutedEventArgs)
dpCatepicker.IsDropDownOpen = True
End Sub
Ereignisse bei Öffnen und Schließen des Kalenders
Die beiden Ereignisse CalendarOpened und CalendarClosed werden ausgelöst, wenn der Kalender angezeigt oder ausgeblendet wird. Sie werden wie folgt zum Element hinzugefügt:
<DatePicker x:Name="dpDatepicker" SelectedDateChanged="dpDatepicker_SelectedDateChanged" CalendarOpened="dpDatepicker_CalendarOpened" CalendarClosed="dpDatepicker_CalendarClosed"></DatePicker>
Die beiden Ereignisse programmieren wir wie folgt, um den aktuellen Zustand des Kalenders im Ausgabe-Bereich auszugeben:
Private Sub dpDatepicker_CalendarOpened(sender As Object, e As RoutedEventArgs)
Debug.WriteLine("Der Kalender wurde geöffnet.")
End Sub
Private Sub dpDatepicker_CalendarClosed(sender As Object, e As RoutedEventArgs)
Debug.WriteLine("Der Kalender wurde geschlossen.")
End Sub
Ungültige Eingaben abfangen
Wenn Sie in der Standardkonfiguration ein ungültiges Datum wie etwa 30.2.2018 eingeben, wird das Textfeld ohne Kommentar wieder geleert. Das überhaupt etwas geschieht, erfahren Sie im Ausgabe-Bereich – hier erscheint die folgende Meldung:
Ausnahme ausgelöst: "System.FormatException" in mscorlib.dll
Diese Ausnahme können Sie mit einer herkömmlichen Fehlerbehandlung (Try...Catch) nicht abfangen. Allerdings bietet das DatePicker-Element eine eigene Ereignismethode an, um auf solche Fehleingaben zu reagieren, und zwar das Ereignis DateValidationError:
<DatePicker x:Name="dpDatepicker" ... DateValidationError="dpDatepicker_DateValidationError"></DatePicker>
Mit der ersten Version der Ereignismethode zeigen wir nur die Fehlerart an, in diesem Fall System.FormatException:
Private Sub dpDatepicker_DateValidationError(sender As Object, e As DatePickerDateValidationErrorEventArgs)
MessageBox.Show("Fehler: " + e.Exception.GetType.ToString)
End Sub
Geben wir in der Methode den Inhalt der Eigenschaft Message aus, erhalten wir die Meldung aus Bild 3.
Bild 3: Fehler bei ungültigem DatumsformatBestimmten Datumsbereich anzeigen
Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.