如何处理Windows窗体datetimepicker ArgumentOutOfRangeException?

Jos*_*ton 6 .net exception datetimepicker winforms

我遇到了Windows窗体中DateTimePicker控件的一个非常具体的错误.该控件具有自定义格式(MM-YYYY - > 01/2010) - 信用卡的月份/年份.今天是9月29日.如果用户选择该控件,并使用键盘将月份设置为2月,则控件将抛出ArgumentOutOfRangeException.没有2009年2月29日这样的日期.这也将发生在第31天,只有30天的一个月.

通过将日期设置为"01"来处理此问题很容易,但是用户可以单击日历以手动选择30日,然后使用键盘选择2月.

当输入发生在GUI而非真正的代码中时,如何捕获此异常?我们试图在TextChanged事件中捕获它,但这已经太晚了.异常已经抛出.

有办法处理这个案子吗?如果控件自动将当天更改为该月的最高值,那将是很好的.或者至少它是否通过事件传递了异常.

(我知道我们可以捕获KeyPressed事件,并且每次将日期设置为01,但这感觉很'hacky').

Jon*_*eet 5

如果你只想要月份和年份,在我看来你不应该首先使用DatePicker ...为什么向用户提供一个控件,其中包括他们不应该使用的月份的那一天它?

我建议您使用两个下拉菜单,一个用于一年,一个用于一个月.几乎每个在线支付页面的用户都会熟悉这一点,并且可以避免这个问题.

编辑:好的,要回答处理异常的具体问题,您可以使用该Application.ThreadException事件,但如果可以,我会尽量避免这样做.