Win32: Как запретить DateTimePicker принимать двухзначные годы? - PullRequest
2 голосов
/ 22 июня 2010

Microsoft DateTimePicker общий элемент управления показывает ShortDate в соответствии с настроенными настройками локали. Компьютер клиента настроен на использование двузначного года ShortDateFormat (d/M/yy), поэтому DateTimePicker отображает двузначные годы:

альтернативный текст http://i48.tinypic.com/15gxfys.jpg

Когда пользователь помещает фокус в блок года средства выбора даты и времени, Microsoft указывает на проблему и показывает полный год из 4 цифр:

альтернативный текст http://i50.tinypic.com/2po5qc7.jpg

Но затем пользователь, желая ввести 1929 как год, вводит год из двух цифр:

альтернативный текст http://i46.tinypic.com/2hrltlh.jpg

И затем, когда они выходят из системы, они запутываются, когда Windows интерпретирует их двузначные годы как между 1930 и 2029, и предполагается, что это 2029:

альтернативный текст http://i48.tinypic.com/j139qb.jpg

Заказчик имеет глобальную корпоративную политику, которая требует, чтобы региональные настройки Windows были настроены на двузначные годы.

Так что в качестве обходного пути мне нужно заставить каждый элемент управления DateTimePicker использовать собственный формат даты, используя удобный DateTime_SetFormat макрос :

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

Это помогает, так что теперь DateTimePicker теперь всегда показывает четырехзначный год:

альтернативный текст http://i46.tinypic.com/2rcpt2q.jpg

Проблема в том, что пользователь по-прежнему может вводить двухзначный год " недопустимый ":

альтернативный текст http://i46.tinypic.com/2hrltlh.jpg

Какую Windows по-прежнему интерпретируют в соответствии с правилами как 2029:

альтернативный текст http://i46.tinypic.com/2rcpt2q.jpg

Мне нужен инструмент выбора даты и времени для отклонения двухзначных лет.

Если это не сработает, я буду вынужден заменить каждый DateTimePicker на 3 поля ввода:

22 * ​​1060 * 6 29

Где я могу закрасить недопустимые числа красным и указать на неверный ввод данных пользователем.

Как я могу запретить DateTimePicker принимать ошибки y2k?

1 Ответ

0 голосов
/ 22 июня 2010

Если вы добавите стиль окна DTS_APPCANPARSE, вы можете обработать сообщение WM_NOTIFY: DTN_USERSTRING и самостоятельно проанализировать строку

...