当前位置: 代码迷 >> C# >> 发现DateTimePicker的BUG (散分),该怎么解决
  详细解决方案

发现DateTimePicker的BUG (散分),该怎么解决

热度:85   发布时间:2016-05-05 04:18:45.0
发现DateTimePicker的BUG (散分)
今天无意操作了一下把 发现项目里的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 而不会更改。。。
------解决思路----------------------
实际应用中,使用年月格式的情况很少。一般都是统计报表之类  需要一个时间输入,统计一年之中各个月。不过 我一般都搞成sql语句执行。

不过  看  拉登 描述的这么慷慨激昂,这就是个bug。你给盖茨 打电话吧,
------解决思路----------------------

numericUpDown后台修改上下限时也麻烦的,先要扩充上下限的范围,然后在调整
------解决思路----------------------
系统自带的这些时间控件就是坑,不好看不好说,还不好操作
------解决思路----------------------
呵呵,的确是个bug。
------解决思路----------------------
那你可以带个日期,然后把日期隐藏起来啊。文本框弄的短点。。
------解决思路----------------------
这个bug有点意思
------解决思路----------------------
mark  以后用得就注意。