Comprehensive Guide to DateTimePicker: Date and Time Selection in WinForms

Nov 22, 2025 · Programming · 11 views · 7.8

Keywords: DateTimePicker | WinForms | Date_Time_Selection | Custom_Format | C#_Programming

Abstract: This article provides an in-depth exploration of the DateTimePicker control in WinForms, focusing on its capability to handle both date and time selection. It details the implementation of custom display formats, analyzes the feasibility of manual date/time input, and compares single-control versus dual-control approaches. The guide also incorporates extended functionality from Telerik RadDateTimePicker, offering developers comprehensive implementation strategies and best practices.

Overview of DateTimePicker Control Capabilities

In Windows Forms application development, the DateTimePicker control serves as a fundamental component for date and time input. While primarily designed for date selection, proper configuration can extend its functionality to include time selection capabilities.

Implementing Custom Display Formats

The key to enabling both date and time display in DateTimePicker lies in setting the Format property to Custom and specifying an appropriate custom format string. The following code demonstrates this implementation:

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "MM/dd/yyyy hh:mm:ss";

In this example, the CustomFormat property is set to "MM/dd/yyyy hh:mm:ss", where MM represents two-digit month, dd represents two-digit day, yyyy represents four-digit year, hh represents 12-hour format hours, mm represents minutes, and ss represents seconds. Developers can adjust the format string according to specific requirements, such as using "yyyy-MM-dd HH:mm" for 24-hour time format.

Manual Input Functionality

DateTimePicker inherently supports manual date and time input. When the control gains focus, users can directly type date-time values that conform to the specified format. It's important to note that when using textual month representations (like MMM), users must provide corresponding numeric month values unless developers implement additional text month parsing logic.

Alternative Approach: Dual Control Configuration

In certain scenarios, employing two separate DateTimePicker controls for date and time respectively may be more appropriate. Here's a typical implementation of this approach:

// Date portion control
datePortionDateTimePicker.Format = DateTimePickerFormat.LongDate;

// Time portion control  
timePortionDateTimePicker.Format = DateTimePickerFormat.Time;
timePortionDateTimePicker.ShowUpDown = true;

This approach offers a more intuitive time selection interface, particularly when the ShowUpDown property is set to true, allowing users to precisely adjust time values using up and down arrow buttons.

Data Integration and Synchronization

When using the dual-control approach, values from both controls need to be combined into a complete DateTime object:

DateTime myDate = datePortionDateTimePicker.Value.Date + 
                  timePortionDateTimePicker.Value.TimeOfDay;

Similarly, when assigning an existing DateTime value to both controls:

datePortionDateTimePicker.Value = myDate.Date;
timePortionDateTimePicker.Value = myDate;

Telerik RadDateTimePicker Extended Features

For scenarios requiring more advanced functionality, Telerik UI for WinForms provides the RadDateTimePicker control, which natively supports time picker display within the popup calendar:

this.radDateTimePicker1.Format = DateTimePickerFormat.Custom;
this.radDateTimePicker1.CustomFormat = "dd/MM/yyyy hh:mm";
this.radDateTimePicker1.DateTimePickerElement.ShowTimePicker = true;
this.radDateTimePicker1.DateTimePickerElement.CalendarSize = new Size(400, 300);

By setting the ShowTimePicker property to true, users can select both date and time within the same interface, significantly enhancing user experience.

Integration in Data Grid Controls

When integrating DateTimePicker functionality within data grid controls like RadGridView, configuration can be performed through the CellEditorInitialized event:

private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
    RadDateTimeEditor editor = e.ActiveEditor as RadDateTimeEditor;
    if (editor != null)
    {
        RadDateTimeEditorElement el = editor.EditorElement as RadDateTimeEditorElement;
        el.Format = DateTimePickerFormat.Custom;
        el.CustomFormat = "dd/MM/yyyy hh:mm";
        el.ShowTimePicker = true;
        el.CalendarSize = new Size(400, 300);
    }
}

Event Handling and User Experience Optimization

To further enhance user experience, handling the time picker's close button event enables immediate data updates:

private void radGridView1_CellEditorInitialized(object sender, GridViewCellEventArgs e)
{
    RadDateTimeEditor editor = e.ActiveEditor as RadDateTimeEditor;
    if (editor != null)
    {
        RadDateTimeEditorElement el = editor.EditorElement as RadDateTimeEditorElement;
        el.Format = DateTimePickerFormat.Custom;
        el.CustomFormat = "dd/MM/yyyy hh:mm";
        el.ShowTimePicker = true;
        el.CalendarSize = new Size(400, 300);
        el.Calendar.ShowFooter = true;
        
        RadDateTimePickerCalendar calendarBehavior = el.GetCurrentBehavior() as RadDateTimePickerCalendar;
        calendarBehavior.TimePicker.CloseButtonClicked -= TimePicker_CloseButtonClicked;
        calendarBehavior.TimePicker.CloseButtonClicked += TimePicker_CloseButtonClicked;
    }
}

private void TimePicker_CloseButtonClicked(object sender, EventArgs e)
{
    // Handle close button click event, such as immediate data source update
}

Best Practices and Considerations

When selecting a DateTimePicker implementation approach, consider the following factors: for simple date-time selection requirements, standard DateTimePicker with CustomFormat settings typically suffices; for scenarios requiring richer interaction, Telerik RadDateTimePicker offers superior solutions; in performance-critical applications, the dual-control approach may be more suitable as it avoids complex popup interfaces.

Format String Detailed Explanation

Custom format strings support various format specifiers: d for short date format, D for long date format, t for short time format, T for long time format. Custom format characters include: yyyy (four-digit year), MM (two-digit month), dd (two-digit day), HH (24-hour format), hh (12-hour format), mm (minutes), ss (seconds). Proper combination of these format characters enables creation of date-time display formats compliant with various locale requirements.

Cross-Language Implementation Considerations

In globalized applications, special attention must be paid to date-time format localization. It's recommended to use CultureInfo.CurrentCulture to automatically adapt to different regional date-time format preferences, or provide user-configurable format options.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.