Das DatePicker-Steuerelement

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 Steuer­element – 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 Steuer­element 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 Steuer­element sieht dann im Entwurf wie in Bild 1 aus.

Das DatePicker-Element in der Entwurfsansicht

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).

Das DatePicker-Element in Aktion

Bild 2: Das DatePicker-Element in Aktion

Besondere 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.

Fehler bei ungültigem Datumsformat

Bild 3: Fehler bei ungültigem Datumsformat

Bestimmten Datumsbereich anzeigen

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Ich habe die Datenschutzbestimmungen zur Kenntnis genommen.