Win32: Как предотвратить DateTimePicker от принятия двухзначных лет?

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-значные годы.

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

22 6 29

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

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

2
задан Ian Boyd 22 июня '10 в 18:28
источник поделиться

1 ответ

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

0
ответ дан Anders 22 июня '10 в 21:52
источник поделиться

Другие вопросы по меткам