2009-09-29 6 views
5

WindowsフォームのDateTimePickerコントロールで非常に特定のバグが発生しました。このコントロールには、カスタムフォーマット(MM-YYYY - > 01/2010) - クレジットカードの月/年があります。今日は9月29日です。ユーザーがコントロールを選択し、キーボードを使用して2月に月を設定すると、コントロールはArgumentOutOfRangeExceptionをスローします。 2009年2月29日の日付はありません。これは31日目の日にも起こり、30日しかない月に移動します。それは「01」に設定することで、一日にこれを処理するのに十分に簡単だろうWindowsフォームのdatetimepicker ArgumentOutOfRangeExceptionはどのように処理できますか?

、しかし、ユーザーが手動で30日を選択するにはカレンダーをクリックして、2月を選択するために、キーボードを使用することができます。入力は、コード内で実際にGUIで起こっとされていない場合

はどのようにこの例外は、キャッチすることができますか?私たちはTextChangedイベントでそれをキャッチしようとしましたが、それはすでに遅すぎます。例外はすでにスローされています。

このケースを処理する方法はありますか?コントロールがその日の最高値に自動的に変更された場合は、いいでしょう。少なくとも、イベントを介して例外を受けた場合。

(私たちはトラップKeyPressedイベントをできたと01日にそれぞれの時間を設定することを承知しているが、これは「ハック」感じています)。コントロールは、カレンダーのドロップダウンではなく、スピナーになるように

答えて

5

月と年のみが必要な場合は、最初にDatePickerを使用しないでください...なぜ、ユーザーには、コントロールする必要がある日を含むコントロールを提示しますか?それを使っているのだろうか?

私はあなたが2つのドロップダウン、今年の1月のための1つを使用するかということを示唆しています。これは、ほぼすべてのオンライン支払いページからのユーザーにとっては馴染み深いものであり、問​​題を回避します。

編集:例外を処理する特定の質問に答えるには、Application.ThreadExceptionイベントを使用できますが、できればそれを行う必要はありません。

+0

私は、その日がユーザーに表示されたときに起こるかどうかをテストしました。だから間違ったコントロールが使用中です。しかし、質問をする私の目的は、同様の方法で発生した例外を処理することが可能かどうかを調べることでした。コントロールのUIインタラクションから例外が生成された場合。 –

1

あなたがtrueにDateTimePickerのShowUpDownプロパティを設定してもらえますか?

+0

これはもちろん、ユーザーに表示する前に1に設定する必要があることを意味します。 –

0

は、あなただけの一日なし月/年を入力することができます方法はありません。明示的に日が指定されていない場合、現在の日が使用されます。 DateTimePickerにはすべてのデータが必要です。マスクの背後に隠すことは重要です。

のDateTimePickerこれを行うにする唯一の方法は、DateTimePickerから派生し、日なしで入力を処理するカスタム方法を持って、独自のクラスを記述するために、典型的な.NETの答えです。 とにかく、一日を設定しなくても遠ざかることはありません。

私はMaskedTextBoxにマスクを'00/0000 '(クレジットカード形式)に設定してから入力を検証することをお勧めします。

関連する問題