.net - 如何处理 Windows 窗体 datetimepicker ArgumentOutOfRangeException?

标签 .net winforms exception datetimepicker

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

通过将日期设置为“01”可以轻松处理此问题,但是用户可以单击日历手动选择 30 日,然后使用键盘选择二月。

当输入发生在 GUI 上而不是真正在代码中时,如何捕获此异常?我们已经尝试在 TextChanged 事件中捕获它,但是已经太晚了。异常已经抛出。

有没有办法处理这个案子?如果控件自动将日期更改为该月的最高值,那就太好了。或者至少如果它通过事件传递了异常。

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

最佳答案

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

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

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

关于.net - 如何处理 Windows 窗体 datetimepicker ArgumentOutOfRangeException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1490890/

相关文章:

.net - VS2010 的服务器资源管理器数据连接中的 SQL Server .NET Framework 数据提供程序不支持 SQL 2000

.net - MonoDevelop 2.8 无法将 iOS 应用程序目标设置为 iPad

c# - 如何在 C# winform 应用程序中写入非缓存文件

java - 一子线程抛出异常就返回主线程

java - HTTP 状态 500 - java.lang.NullPointerException

c# - finally block 中的多个操作

.net - @item.BodyText 在 MVC3 中不是原始格式

c# - 出列前读取 Queue<T> 中的项目

.net - 什么 WinForms 控件对应于 VCL (Delphi) TControlBar?

c# - 如何更改选项卡顺序或修改 winform 窗体中的选项卡页面集合?