通常,我希望用户选择开始日期和结束日期。但仅仅选择日期是不够的,我们还必须改变数据。
默认情况下,DateTimePicker.Value
就像
Value 1: 2012-01-01 10:12:09
Value 2: 2012-01-02 10:12:09
当用户选择两个日期时,显然他的意思是
Value 1: 2012-01-01 00:00:00
Value 2: 2012-01-02 23:59:59
我经常忘记做非直观的
DateTime start = dateTimePicker1.Value.Date;
DateTime finish = dateTimePicker2.Value.Date.AddDays(1).AddSeconds(-1);
你找到了更有效的处理方法吗?
答案 0 :(得分:1)
如果您使用DateTimePicker
个对象,可以创建两个小的自定义类:StartDateTimePicker
和EndDateTimePicker
。每个类都派生自DateTimePicker
,并且在OnValueChanged事件上只有一个布尔值和一个EventHandler。该事件将用于在设置后调整值,并且布尔值将用于实现Balking Pattern。以下是StartDateTimePicker
:
public class StartDateTimePicker : DateTimePicker
{
bool handling = false;
// Note:
public StartDateTimePicker()
: base()
{
// This could be simplified to a lambda expression
this.ValueChanged += new EventHandler(StartDateTimePicker_ValueChanged);
}
void StartDateTimePicker_ValueChanged(object sender, EventArgs e)
{
// If the value is being changed by this event, don't change it again
if (handling)
{
return;
}
try
{
handling = true;
// Add your DateTime adjustment logic here:
Value = Value.Date;
}
finally
{
handling = false;
}
}
}
然后,您只需使用它们代替正常的DateTimePicker
对象,就不必担心确保日期已经适当调整了。
您需要花时间编写EndDateTimePicker
课程(上面已经是一个功能齐全的StartDateTimePicker
),但是当您在更多地方使用这些课程时,它会让您的工作更轻松。