Microsoft的DateTimePicker
通用控件根据配置的区域设置显示 ShortDate 。客户的计算机配置了一个2位数年份ShortDateFormat(d/M/yy
),因此DateTimePicker显示2位数年份:
alt text http://i48.tinypic.com/15gxfys.jpg
当用户将焦点放在日期时间选择器的年度块中时,Microsoft会指出问题,并显示完整的4位数年份:
alt text http://i50.tinypic.com/2po5qc7.jpg
但是,用户想要输入1929
作为一年,键入一个2位数的年份:
alt text http://i46.tinypic.com/2hrltlh.jpg
然后当他们发布时,当Windows将他们的2位数年份解释为介于1930
和2029
之间时,他们会感到困惑,并且假设它是2029年:
alt text http://i48.tinypic.com/j139qb.jpg
客户制定了全球公司政策,规定Windows区域设置配置为2位数年份。
因此,作为一种解决方法,我需要强制每个DateTimePicker
控件使用自定义日期格式,使用方便的DateTime_SetFormat
macro:
DateTime_SetFormat(hwnd_DateOfEventPicker, "d/M/yyyy");
这有帮助,现在DateTimePicker
现在总是显示一个4位数的年份:
alt text http://i46.tinypic.com/2rcpt2q.jpg
问题是用户仍然可以输入“无效”2位数年份:
alt text http://i46.tinypic.com/2hrltlh.jpg
根据规则,哪个Windows仍在使用,如2029:
alt text http://i46.tinypic.com/2rcpt2q.jpg
我需要日期时间选择器来拒绝2位数年份。
如果这不起作用,那么我将被迫用3个编辑框替换每个DateTimePicker:
22 6 29
我可以将无效数字换成红色,并指出用户输入的无效数据。
如何阻止DateTimePicker接受y2k错误?
答案 0 :(得分:0)
如果添加DTS_APPCANPARSE窗口样式,则可以处理WM_NOTIFY:DTN_USERSTRING消息并自行解析字符串