寫在前面:在.net中讓DateTimePicker顯示一個空的時間值,也許是很容易的事情,但事實上,也不是很容易的,至少,沒有經過努力的修改和重畫
,你是達不到的。在修改這個控件的時候,你又常常發現會有bug。下面介紹一個方法,至少源作者是經過研究的,沒有發現多少問題。
源網址
http://www.codeproject.com/KB/selection/Nullable_DateTimePicker.aspx
你可以在上述的網址找到源代碼和英文的說明。
效果圖
下圖中,你只要按一下Delete鍵就可以將DateTimePicker的值設置為空,實際的值是DateTime.MinValue,這一個簡單的效果,也許是很多程序員想看到。不過學習一下這個控件。
源代碼
最重要的兩個重載方法是下面倆。
protected override void OnCloseUp(EventArgs eventargs)
protected override void OnKeyDown(KeyEventArgs e)
DateTimePicker本身是支持自定義格式的,DateTimePickerFormat.Custom,就是聲明使用自定義格式的。
public new DateTime Value
{
get
{
if (bIsNull)
return DateTime.MinValue;
else
return base.Value;
}
set
{
if (value == DateTime.MinValue)
{
if (bIsNull == false)
{
oldFormat = this.Format;
oldCustomFormat = this.CustomFormat;
bIsNull = true;
}
this.Format = DateTimePickerFormat.Custom;
this.CustomFormat = " ";
}
else
{
if (bIsNull)
{
this.Format = oldFormat;
this.CustomFormat = oldCustomFormat;
bIsNull = false;
}
base.Value = value;
}
}
}
出處:小作坊網ChakMan
C#日期控件datetimepicker保存空值方法
方法一(推薦):
設置datetimepicker的屬性ShowCheckBox為true
在窗口初始化時候,添加代碼this.datetimepicker1.Checked = false;
保存日期值入庫的時候,就可以根據if(this.datetimepicker1.Checked ==false),保存空值。
方法二:
在窗口初始化函數中添加:
this.dateTimePicker1.Format=DateTimePickerFormat.Custom;
this.dateTimePicker1.CustomFormat=" ";
在日期改變事件里寫:
private void dateTimePicker1_ValueChanged(object sender, System.EventArgs e)
{
this.dateTimePicker1.Format=DateTimePickerFormat.Long;
this.dateTimePicker1.CustomFormat=null;
}
這樣就實現了,在程序初始化時dateTimePicker顯示為空
但是,這種寫法有個問題,保存入庫的時候,還要加一個判斷if(this.dateTimePicker1.Text.toString()==""),保存空值;else 保存this.dateTimePicker1.value。
這種寫法遇到個bug,一直沒有解決,就是日期控件默認是空的,在第一次選擇一個日期后必須失去焦點才能選擇新的日期,不知道什么原因?
方法三:
在日期控件上面覆蓋一個文本框,然后初始化時候文本框是空值,每次日期選擇之后將值附在文本框里面。
轉自:https://www.cnblogs.com/emanlee/archive/2009/07/26/1531308.html