3

2013 年 10 月 31 日の値に初期化された MMM-yyyy の CustomFormat を持つDateTimePickerがあるとします。これは Oct-2013 として表示されます。

コントロールの Oct セクションを選択し、上矢印または下矢印を押すと、ArgumentOutOfRangeExceptionが生成されます。Year 、Month、および Day パラメーターは、表現できない DateTime を記述します

おそらく日を変えずに月を変えており、9月と11月は30日しかありません。CustomFormat が dd-MMM-yyyy の場合、日は自動的に 30 日に変更されるため、エラーは発生しません。

このエラーを回避またはキャッチするにはどうすればよいですか?

DateTimePicker が常に月初に初期化されるようにするコードを追加できますが、ユーザーがカレンダーのドロップダウンから月と日付を選択できるようにしたいので、ユーザーが手動で行った状況に対処する必要があります。 31 日を選択し、キーボードを使用して月を変更しようとします。

4

2 に答える 2

6

10月1日に初期化するだけです。例外なく、同じ表示のままです。

そしてもちろん、ユーザーが選択した値を調整して、最初の値を維持する必要があります。

    private void dateTimePicker1_ValueChanged(object sender, EventArgs e) {
        var dtp = (DateTimePicker)sender;
        dtp.Value = new DateTime(dtp.Value.Year, dtp.Value.Month, 1);
    }
于 2013-10-03T13:14:14.430 に答える
0

ええ、私は答えがすでに投稿され、OPによって受け入れられていることを知っています。しかし、私がこの解決策を試してみたところ、うまくいきませんでした。

わかりました、例を見てみましょう: 日付形式をDateTimePickertoに設定し、矢印キーを押して月からto (9 月から 10 月)MM/yyyyを選択しようとすると、例外がスローされ、ファイルが表示されます。0910DownProgram.cs

解決策はHans Passantによって与えられたものと同じですが、唯一の違いは、 のPreviewKeyDown代わりに event を使用する必要があることですValueChangedKeyDownイベントもこれに役立つかどうかはわかりません。しかし、PreviewKeyDownイベントでテストしたところ、問題なく動作していました。

于 2014-10-31T10:06:33.527 に答える