Win32: Как запретить DateTimePicker принимать двухзначные годы?
От 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
теперь всегда показывает 4-значный год:
http://i46.tinypic.com/2rcpt2q.jpg
Проблема в том, что пользователь все еще может ввести " недопустимый " двухзначный год:
http://i46.tinypic.com/2hrltlh.jpg
Какую Windows все еще интерпретируют, согласно правилам, как 2029:
http://i46.tinypic.com/2rcpt2q.jpg
мне нужен сборщик даты и времени, чтобы отклонить 2-значные годы.
Если это не может работать, то я буду вынужден заменить каждый DateTimePicker на 3 поля ввода:
22 6 29
Где я могу покрасить недопустимые числа в красный и указать неверный ввод данных пользователем.
Как я могу запретить DateTimePicker принимать ошибки 2000 года?
1 ответ
Если вы добавите стиль окна DTS_APPCANPARSE, вы можете обработать сообщение WM_NOTIFY: DTN_USERSTRING и проанализировать строку самостоятельно.