今天无意操作了一下把 发现项目里的DateTimePicker 怎么输入2月份的值提出异常。。。怪了。于是百度还真有这问题
新建一个WinForm或MFC对话框工程,在对话框上放一个DateTimePicker控件,本文以WinForm程序为例。
初始化DateTimePicker控件:
dateTimePicker1.Value = new DateTime(2008, 12, 31);
dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "yyyy-MM";
运行程序,将光标定位在月份上,然后按键盘方向键的“↓”向下键,程序就会崩溃。
这是什么原因呢?最后经我研究发现,当我们以年-月-日的格式显示DateTimePicker的时候,光标放在月份上,按向下键,月份12变为11,同时31日也自动变为30,因为11月只有30天;而当我们以年-月的格式显示日期的时候,光标放在月份上,按向下键,月份12变为11,但是隐藏的日并没有由31变为30,所以11月31日是不合法的,所以崩溃!这是控件的一个BUG!同样的,当我们把DateTimePicker时间初始化为2008年2月29日,以年-月或年的格式显示时间,用方向键调整年份,同样会崩溃的,因为2007年或2009年2月只有28天!
所以,我们在用DateTimePicker,并且只显示年或者年-月的时候,应避免初始化时日大于28号,这是微软的一个BUG,希望大家用的时候注意啦,希望微软能够尽快修改这个BUG。
注:如果格式为yyyy-MM-dd 发现这个控件会自动更改后面dd的值,如果yyyy-MM 而不会更改。。。