处理两个DateTimePicker太容易出错?

时间:2012-06-29 12:40:33

标签: c#

通常,我希望用户选择开始日期和结束日期。但仅仅选择日期是不够的,我们还必须改变数据。

默认情况下,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);

你找到了更有效的处理方法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用DateTimePicker个对象,可以创建两个小的自定义类:StartDateTimePickerEndDateTimePicker。每个类都派生自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),但是当您在更多地方使用这些课程时,它会让您的工作更轻松。