Since the WinForm DateTimePicker cannot set a null value (NULL), I did an extension based on the original DateTimePicker.
If there is a bug, can feedback, I revise.
usingSystem;usingSystem.ComponentModel;usingSystem.Windows.Forms;namespacewinformtest{ Public classDatetimepicker2:datetimepicker {Const stringNullableformat =" "; BOOLisselfsetting; stringOriginalcustomformat; BOOLoriginalcustomformatinitialized; DateTimePickerFormat?OriginalFormat; BOOLIsnullablestate {Get{return This. Format = = Datetimepickerformat.custom && This. CustomFormat = =Nullableformat;} } voidSetnullable (BOOLnullable) { if(! This. Originalformat.hasvalue) { This. OriginalFormat = This. Format; } if(! This. originalcustomformatinitialized) { This. Originalcustomformat = This. CustomFormat; This. originalcustomformatinitialized =true; } This. isselfsetting =true; This. Format = nullable? Datetimepickerformat.custom: This. Originalformat.value; This. CustomFormat = nullable? Nullableformat: This. Originalcustomformat; This. isselfsetting =false; } #regionProperties[Browsable (false)] [DesignerSerializationVisibility (Designerserializationvisibility.hidden)] PublicDatetime?Value2 {Get{return This. Isnullablestate? (DateTime?)NULL: Value;} Set { if(value.) HasValue) Value=value. Value; Setnullable (!value. HasValue); } } Public NewDateTimePickerFormat Format {Get{return Base. Format; } Set { if(! This. isselfsetting) This. OriginalFormat =value; Base. Format =value; } } Public New stringCustomFormat {Get{return Base. CustomFormat; } Set { if(! This. isselfsetting) { This. Originalcustomformat =value; This. originalcustomformatinitialized =true; } Base. CustomFormat =value; } } #endregion #regionEventsprotected Override voidOnGotFocus (EventArgs e) {if( This. isnullablestate) setnullable (false); Base. OnGotFocus (e); } protected Override voidOnMouseDown (MouseEventArgs e) {if( This. isnullablestate) setnullable (false); Base. OnMouseDown (e); } protected Override voidOnKeyDown (KeyEventArgs e) {setnullable (E.keycode= = Keys.back | | E.keycode = =keys.delete); Base. OnKeyDown (e); } #endregion }}
DateTimePicker that can set the null value (Nullable)