0

多くの場合、ユーザーに開始日と終了日を選択してもらいます。しかし、日付を選択するだけでは十分ではなく、データも変更する必要があります。

デフォルトではDateTimePicker.Value

Value 1: 2012-01-01 10:12:09
Value 2: 2012-01-02 10:12:09

ユーザーが 2 つの日付を選択した場合、その意図が明確である必要があります。

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);

これに対処するためのより効果的な方法を見つけましたか?

4

1 に答える 1

1

このようなオブジェクトを頻繁に使用する場合、aと anDateTimePickerという 2 つの小さなカスタム クラスを作成できます。各クラスは から派生し、ブール値とOnValueChangedイベントの EventHandler を持つだけです。イベントは設定後に値を調整するために使用され、ブール値はBalking パターンを実装するために使用されます。の例を次に示します。StartDateTimePickerEndDateTimePickerDateTimePickerStartDateTimePicker

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)。

于 2012-06-29T12:53:53.977 に答える