3

Microsoft 的DateTimePicker通用控件根据配置的 Locale 设置显示ShortDate 。客户的计算机配置了 2 位数年份 ShortDateFormat ( d/M/yy),因此 DateTimePicker 显示 2 位数年份:

替代文字

当用户将焦点放在日期时间选择器的年份块中时,Microsoft 会指出问题,并显示完整的 4 位数年份:

替代文字

但随后,想要输入1929年份的用户键入了一个 2 位数的年份:

替代文字

然后当他们标出时,当 Windows 将他们的 2 位数年份解释为介于1930和之间时,他们会感到困惑2029,并且假定为 2029:

替代文字

客户制定了一项全球公司政策,该政策规定将 Windows 区域设置配置为 2 位数年份。

因此,作为一种解决方法,我需要使用方便的DateTimePicker强制每个控件使用自定义日期格式:DateTime_SetFormat

DateTime_SetFormat(hwnd_DateOfEventPicker, "d/M/yyyy");

这有帮助,所以现在DateTimePickernow 总是显示 4 位数的年份:

替代文字

问题是用户仍然可以输入“无效”的 2 位数年份:

替代文字

根据规则,哪个 Windows 仍在解释为 2029:

替代文字

我需要日期时间选择器来拒绝 2 位数的年份。

如果这不起作用,那么我将被迫用 3 个编辑框替换每个 DateTimePicker:

22 6 29

我可以将无效数字涂成红色,并指出用户输入的无效数据。

如何防止 DateTimePicker 接受 y2k 错误?

4

1 回答 1

1

如果添加 DTS_APPCANPARSE 窗口样式,则可以处理 WM_NOTIFY: DTN_USERSTRING 消息并自己解析字符串

于 2010-06-22T18:52:32.980 回答