using System;
using System.Windows.Forms;
namespace CSP.Views.CustomControls
{
public class NullableDateTimePicker : DateTimePicker
{
private DateTime? SavedValue { get; set; }
private DateTimePickerFormat SavedFormat { get; set; }
private string SavedCustomFormat { get; set; }
private bool IsNullValue { get; set; }
public NullableDateTimePicker()
{
Format = DateTimePickerFormat.Custom;
CustomFormat = "yyyy年MM月dd日";
Value = DateTime.Now;
Text = Value.ToString();
IsNullValue = false;
}
public NullableDateTimePicker(DateTime dateTime)
{
Format = DateTimePickerFormat.Custom;
CustomFormat = "yyyy年MM月dd日";
Value = dateTime;
Text = Value.ToString();
IsNullValue = false;
}
public new DateTime? Value
{
get;
set;
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Delete)
{
if (!IsNullValue)
{
SavedFormat = Format;
SavedCustomFormat = CustomFormat;
SavedValue = Value;
Value = null;
CustomFormat = " ";
IsNullValue = true;
}
}
else
{
if (IsNullValue)
{
Format = SavedFormat;
CustomFormat = SavedCustomFormat;
Value = SavedValue;
IsNullValue = false;
}
}
}
protected override void OnTextChanged(EventArgs e)
{
if (String.IsNullOrWhiteSpace(Text))
{
Value = null;
IsNullValue = true;
}
else
{
Value = DateTime.Parse(Text);
IsNullValue = false;
}
}
protected override void OnValueChanged(EventArgs e)
{
if (IsNullValue)
{
Format = SavedFormat;
CustomFormat = SavedCustomFormat;
IsNullValue = false;
}
if (!String.IsNullOrWhiteSpace(Text))
Value = DateTime.Parse(Text);
else
Value = null;
}
}
}