Zum Inhalt
Kuonen.UI

DateTimePicker

Das Datums- und Zeitfeld von WinForms: Formate Long, Short, Time und Custom, Segmente tippen und mit den Pfeilen drehen. Die Klappe zeigt je nach Format den Kalender, die Walzen für die Zeit oder beides (dann gilt beides mit ✓). Mit Haken lässt sich der Wert ausschalten, mit Drehknöpfen statt Klappe drehen.

Vorführung: DateTimePickerVorführung: DateTimePicker

KXAML

DateTimePickerSeite.kxaml
<StackPanel xmlns="https://ui.kuonen.org/kxaml"
            xmlns:x="https://ui.kuonen.org/kxaml/x"
            x:Class="Kuonen.UI.Galerie.Seiten.DateTimePickerVorfuehrung"
            Spacing="8">
  <TextBlock Text="Long" FontWeight="SemiBold" />
  <DateTimePicker x:Name="Lang" Width="300" HorizontalAlignment="Left" Value="2026-10-13T14:30:00" ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="LangWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock Text="Short" FontWeight="SemiBold" />
  <DateTimePicker x:Name="Kurz" Width="200" HorizontalAlignment="Left" Format="Short" Value="2026-10-13T14:30:00" ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="KurzWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock Text="Time" FontWeight="SemiBold" />
  <DateTimePicker x:Name="Zeit" Width="200" HorizontalAlignment="Left" Format="Time" Value="2026-10-13T14:30:00" ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="ZeitWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock Text="Custom (dd.MM.yyyy HH:mm)" FontWeight="SemiBold" />
  <!-- Eigenes Muster mit Datum und Zeit: die Klappe zeigt Kalender und Walzen (Entscheid C14). -->
  <DateTimePicker x:Name="Eigen" Width="240" HorizontalAlignment="Left" Format="Custom" CustomFormat="dd.MM.yyyy HH:mm" Value="2026-10-13T14:30:00"
                  ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="EigenWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock Text="Mit Haken (ShowCheckBox)" FontWeight="SemiBold" />
  <DateTimePicker x:Name="Haken" Width="240" HorizontalAlignment="Left" Format="Short" ShowCheckBox="True" Value="2026-10-13T14:30:00"
                  ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="HakenWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock Text="Drehknöpfe (ShowUpDown)" FontWeight="SemiBold" />
  <DateTimePicker x:Name="Drehen" Width="200" HorizontalAlignment="Left" Format="Time" ShowUpDown="True" Value="2026-10-13T14:30:00"
                  ValueChanged="Feld_ValueChanged" DropDown="Feld_DropDown" CloseUp="Feld_CloseUp" />
  <TextBlock x:Name="DrehenWert" Text="Wert: 2026-10-13 14:30:00" />
  <TextBlock x:Name="Ereignisse" Text="Ereignisse: –" TextWrapping="Wrap" />
</StackPanel>
DateTimePickerSeite.kxaml.cs
using Kuonen.UI;
using Kuonen.UI.Controls;

namespace Kuonen.UI.Galerie.Seiten;

public sealed partial class DateTimePickerSeite
{
    protected override Func<UIElement>? KxamlFabrik => () => new DateTimePickerVorfuehrung();
}

/// <summary>KXAML-Fassung der DateTimePicker-Seite: der Baum steht in DateTimePickerSeite.kxaml, hier nur das Verhalten.</summary>
public sealed partial class DateTimePickerVorfuehrung
{
    public DateTimePickerVorfuehrung() => InitializeComponent();

    // Schreibt den Wert unter das Feld, das gemeldet hat.
    private void Feld_ValueChanged(object? sender, EventArgs e)
    {
        if (sender is not DateTimePicker feld) return;
        string text = "Wert: " + DateTimePickerSeite.Wert(feld);
        if (ReferenceEquals(feld, Lang)) LangWert.Text = text;
        else if (ReferenceEquals(feld, Kurz)) KurzWert.Text = text;
        else if (ReferenceEquals(feld, Zeit)) ZeitWert.Text = text;
        else if (ReferenceEquals(feld, Eigen)) EigenWert.Text = text;
        else if (ReferenceEquals(feld, Haken)) HakenWert.Text = text;
        else if (ReferenceEquals(feld, Drehen)) DrehenWert.Text = text;
        Ereignisse.Text = "Ereignisse: ValueChanged";
    }

    private void Feld_DropDown(object? sender, EventArgs e) => Ereignisse.Text = "Ereignisse: DropDown";

    private void Feld_CloseUp(object? sender, EventArgs e) => Ereignisse.Text = "Ereignisse: CloseUp";
}

C#

DateTimePickerSeite.cs
using System.Globalization;
using Kuonen.UI;
using Kuonen.UI.Controls;
using Kuonen.UI.Layout;

namespace Kuonen.UI.Galerie.Seiten;

/// <summary>Galerie-Seite: <see cref="DateTimePicker"/> (WinForms).</summary>
public sealed partial class DateTimePickerSeite : GalerieSeite
{
    public override string Titel => "DateTimePicker";

    public override string Beschreibung =>
        "Das Datums- und Zeitfeld von WinForms: Formate Long, Short, Time und Custom, Segmente tippen und mit den Pfeilen drehen. Die Klappe zeigt je nach Format den Kalender, "
        + "die Walzen für die Zeit oder beides (dann gilt beides mit ✓). Mit Haken lässt sich der Wert ausschalten, mit Drehknöpfen statt Klappe drehen.";

    public override string Stichworte => "Datum Zeit DateTimePicker WinForms Format Long Short Time Custom CustomFormat ShowCheckBox Checked ShowUpDown Klappe Kalender Walze ValueChanged";

    public override string Datei => nameof(DateTimePickerSeite);

    internal static readonly DateTime Vorgabe = new(2026, 10, 13, 14, 30, 0);

    internal static string Wert(DateTimePicker feld) => feld.Value.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) + (feld.ShowCheckBox && !feld.Checked ? " (aus)" : "");

    public override UIElement Baue()
    {
        var ereignisse = new TextBlock { Text = "Ereignisse: –", TextWrapping = TextWrapping.Wrap };
        // Meldet Wert und Ereignisse unter dem Feld.
        TextBlock Ausgabe(DateTimePicker feld)
        {
            var ausgabe = new TextBlock { Text = "Wert: " + Wert(feld) };
            feld.ValueChanged += (_, _) =>
            {
                ausgabe.Text = "Wert: " + Wert(feld);
                ereignisse.Text = "Ereignisse: ValueChanged";
            };
            feld.DropDown += (_, _) => ereignisse.Text = "Ereignisse: DropDown";
            feld.CloseUp += (_, _) => ereignisse.Text = "Ereignisse: CloseUp";
            return ausgabe;
        }

        var lang = new DateTimePicker { Width = 300, HorizontalAlignment = HorizontalAlignment.Left, Value = Vorgabe };
        var kurz = new DateTimePicker { Width = 200, HorizontalAlignment = HorizontalAlignment.Left, Format = DateTimePickerFormat.Short, Value = Vorgabe };
        var zeit = new DateTimePicker { Width = 200, HorizontalAlignment = HorizontalAlignment.Left, Format = DateTimePickerFormat.Time, Value = Vorgabe };
        // Eigenes Muster mit Datum und Zeit: die Klappe zeigt Kalender und Walzen (Entscheid C14).
        var eigen = new DateTimePicker { Width = 240, HorizontalAlignment = HorizontalAlignment.Left, Format = DateTimePickerFormat.Custom, CustomFormat = "dd.MM.yyyy HH:mm", Value = Vorgabe };
        var haken = new DateTimePicker { Width = 240, HorizontalAlignment = HorizontalAlignment.Left, Format = DateTimePickerFormat.Short, ShowCheckBox = true, Value = Vorgabe };
        var drehen = new DateTimePicker { Width = 200, HorizontalAlignment = HorizontalAlignment.Left, Format = DateTimePickerFormat.Time, ShowUpDown = true, Value = Vorgabe };

        var seite = new StackPanel { Spacing = 8 };
        void Zeile(string titel, DateTimePicker feld)
        {
            seite.Children.Add(new TextBlock { Text = titel, FontWeight = 600 });
            seite.Children.Add(feld);
            seite.Children.Add(Ausgabe(feld));
        }
        Zeile("Long", lang);
        Zeile("Short", kurz);
        Zeile("Time", zeit);
        Zeile("Custom (dd.MM.yyyy HH:mm)", eigen);
        Zeile("Mit Haken (ShowCheckBox)", haken);
        Zeile("Drehknöpfe (ShowUpDown)", drehen);
        seite.Children.Add(ereignisse);
        return seite;
    }
}