110,534
社区成员
发帖
与我相关
我的任务
分享
[ToolboxBitmap(typeof(System.Windows.Forms.DateTimePicker))]
public partial class DateTimeControl : DateTimePicker
{
bool isChanged; // 新加 在选择窗口内是否选择了其他值
DateTimePickerFormat _format;
string _customFormat;
bool SetValue = false;//表示当前是否是系统在改变Value属性
/// <summary>
/// 获取或设置分配给控件的日期/时间值
/// </summary>
public new DateTime ? Value
{
get
{
if ((base.CustomFormat == null || base.CustomFormat.Trim() == "") && base.Format == DateTimePickerFormat.Custom)
return null;
else return base.Value;
}
set
{
if (value == null) SetNullValueFormat();
else
{
SetDefaultFormat();
SetValue = true;
base.Value = (DateTime)value;
}
}
}
/// <summary>
/// 格式掩码类型
/// </summary>
public new DateTimePickerFormat Format
{
get
{
return base.Format;
}
set
{
base.Format = value;
_format = base.Format;
}
}
/// <summary>
/// 自定义格式
/// </summary>
public new string CustomFormat
{
get
{
return base.CustomFormat;
}
set
{
base.CustomFormat = value;
_customFormat = base.CustomFormat;
}
}
/// <summary>
/// 构造方法
/// </summary>
public DateTimeControl()
{
_format = base.Format;
_customFormat = base.CustomFormat;
}
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete)
{
Value = null;
base.OnKeyUp(e);
SetNullValueFormat();
}
else
{
base.OnKeyUp(e);
}
}
protected override void OnValueChanged(EventArgs eventargs)
{
base.OnValueChanged(eventargs);
if (!SetValue)//如果当前是系统在改变Value属性,将不执行以下操作
{
DateTime dt = DateTime.Now;
DateTime dt2 = new DateTime(base.Value.Year, base.Value.Month, base.Value.Day, dt.Hour, dt.Minute, dt.Second);
SetValue = true;//设置当前是系统在改变Value属性.
base.Value = dt2;
SetValue = false;//设置系统改变Value属性的过程已经结束.
}
isChanged = true;
}
protected override void OnDropDown(EventArgs eventargs)
{
isChanged = false;
}
/// <summary>
///
/// </summary>
/// <param name="eventargs"></param>
protected override void OnCloseUp(EventArgs eventargs)
{
base.OnCloseUp(eventargs);
if (isChanged) SetDefaultFormat();
}
/// <summary>
/// 设置空值格式
/// </summary>
private void SetNullValueFormat()
{
if (Value == null) return;
SetValue = true; //设置当前是系统在改变Value属性.
_format = base.Format;
_customFormat = base.CustomFormat;
base.Format = DateTimePickerFormat.Custom;
base.CustomFormat = " ";
}
/// <summary>
/// 恢复默认格式
/// </summary>
private void SetDefaultFormat()
{
base.Format = _format;
base.CustomFormat = _customFormat;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace WindowsApplication154
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy-MM-dd HH:mm:ss";
dateTimePicker1.Leave += new EventHandler(dateTimePicker1_Leave);
}
void dateTimePicker1_Leave(object sender, EventArgs e)
{
dateTimePicker1.Value = DateTime.Parse(dateTimePicker1.Value.Date.ToString("yyyy-MM-dd ")
+ DateTime.Now.ToString("HH:mm:ss"));
}
}
}
[ToolboxBitmap(typeof(System.Windows.Forms.DateTimePicker))]
public partial class DateTimeControl : DateTimePicker
{
DateTimePickerFormat _format;
string _customFormat;
bool SetValue = false;//表示当前是否是系统在改变Value属性
/// <summary>
/// 获取或设置分配给控件的日期/时间值
/// </summary>
public new DateTime? Value
{
get
{
if ((base.CustomFormat == null || base.CustomFormat.Trim() == "") && base.Format == DateTimePickerFormat.Custom)
return null;
else
return base.Value;
}
set
{
if (value == null)
{
SetValueNullToFormat();
}
else
{
FurbishFormat();
SetValue = true;
base.Value = (DateTime)value;
}
}
}
/// <summary>
/// 格式掩码类型
/// </summary>
public new DateTimePickerFormat Format
{
get
{
return base.Format;
}
set
{
base.Format = value;
_format = base.Format;
}
}
/// <summary>
/// 自定义格式
/// </summary>
public new string CustomFormat
{
get
{
return base.CustomFormat;
}
set
{
base.CustomFormat = value;
_customFormat = base.CustomFormat;
}
}
/// <summary>
/// 构造方法
/// </summary>
public DateTimeControl()
{
_format = base.Format;
_customFormat = base.CustomFormat;
}
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete)
{
Value = null;
}
base.OnKeyUp(e);
}
protected override void OnValueChanged(EventArgs eventargs)
{
base.OnValueChanged(eventargs);
if (!SetValue)//如果当前是系统在改变Value属性,将不执行以下操作
{
DateTime dt = DateTime.Now;
DateTime dt2 = new DateTime(base.Value.Year, base.Value.Month, base.Value.Day, dt.Hour, dt.Minute, dt.Second);
SetValue = true;//设置当前是系统在改变Value属性.
base.Value = dt2;
SetValue = false;//设置系统改变Value属性的过程已经结束.
}
}
/// <summary>
///
/// </summary>
/// <param name="eventargs"></param>
protected override void OnCloseUp(EventArgs eventargs)
{
FurbishFormat();
base.OnCloseUp(eventargs);
}
/// <summary>
/// 设置值为空时的格式
/// </summary>
private void SetValueNullToFormat()
{
if (Value == null)
return;
SetValue = true;//设置当前是系统在改变Value属性.
_format = base.Format;
_customFormat = base.CustomFormat;
base.Format = DateTimePickerFormat.Custom;
base.CustomFormat = " ";
}
/// <summary>
/// 恢复格式
/// </summary>
private void FurbishFormat()
{
base.Format = _format;
base.CustomFormat = _customFormat;
}
}
public Form18()
{
InitializeComponent();
dateTimePicker1.Enter+=new EventHandler(dateTimePicker1_Enter);
dateTimePicker1.ValueChanged+=new EventHandler(dateTimePicker1_ValueChanged);
dateTimePicker1.Value = DateTime.Parse("2009-11-15");
}
DateTime dt;
private void dateTimePicker1_Enter(object sender, EventArgs e)
{
dt = dateTimePicker1.Value;
}
private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
if (dateTimePicker1.Value < dt)
{
MessageBox.Show("以前的日期");
}
dt = dateTimePicker1.Value; // 根据情况可以不改
}
[ToolboxBitmap(typeof(System.Windows.Forms.DateTimePicker))]
public partial class DateTimeControl : DateTimePicker
{
DateTimePickerFormat _format;
string _customFormat;
bool SetValue = false;//表示当前是否是系统在改变Value属性
bool isnull = false;
/// <summary>
/// 获取或设置分配给控件的日期/时间值
/// </summary>
public new DateTime? Value
{
get
{
if (isnull)
return new DateTime?();
else
return base.Value;
}
set
{
if (value == null)
{
isnull = true;
SetValue = true;
base.Value = base.MinDate;
SetValue = false;
SetValueNullToFormat();
}
else
{
isnull = false;
FurbishFormat();
SetValue = true;
base.Value = (DateTime)value;
SetValue = false;
}
}
}
/// <summary>
/// 格式掩码类型
/// </summary>
public new DateTimePickerFormat Format
{
get
{
return base.Format;
}
set
{
base.Format = value;
_format = base.Format;
}
}
/// <summary>
/// 自定义格式
/// </summary>
public new string CustomFormat
{
get
{
return base.CustomFormat;
}
set
{
base.CustomFormat = value;
_customFormat = base.CustomFormat;
}
}
/// <summary>
/// 构造方法
/// </summary>
public CusDateTimePicker()
{
_format = base.Format;
_customFormat = base.CustomFormat;
}
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.Back || e.KeyCode == Keys.Delete)
{
Value = null;
}
base.OnKeyUp(e);
}
protected override void OnValueChanged(EventArgs eventargs)
{
if (!SetValue)//如果当前是系统在改变Value属性,将不执行以下操作
{
DateTime dt = base.Value.Date + DateTime.Now.TimeOfDay;
Value = dt;
}
base.OnValueChanged(eventargs);
}
/// <summary>
/// 设置值为空时的格式
/// </summary>
private void SetValueNullToFormat()
{
SetValue = true;//设置当前是系统在改变Value属性.
base.Format = DateTimePickerFormat.Custom;
base.CustomFormat = " ";
SetValue = false;
}
/// <summary>
/// 恢复格式
/// </summary>
private void FurbishFormat()
{
base.Format = _format;
base.CustomFormat = _customFormat;
}
}