Page 1 of 1
Непонятна работа DI_FIXEDIT
Posted: Mon 03 Jul, 2017 04:32
by Dec
Имею маску (###) #99-99-99
, начальное значение (012) 345-67-89
, но в поле ввода появляется (012) 34-56-78
. Так и задумано, или я чего то не понимаю?
Непонятна работа DI_FIXEDIT
Posted: Mon 03 Jul, 2017 06:49
by Alexey Samlyukov
а ширина поля задана правильно?
Непонятна работа DI_FIXEDIT
Posted: Mon 03 Jul, 2017 07:02
by Dec
Если идет речь о поле MaxLength, то при значениях 0/15/100 результат один.
Непонятна работа DI_FIXEDIT
Posted: Mon 03 Jul, 2017 13:08
by Shmuel
Dec, это нормальное поведение, так как # в маске матчит пробел в вашем начальном значении.
Непонятна работа DI_FIXEDIT
Posted: Mon 03 Jul, 2017 23:16
by Dec
Shmuel, не понял объяснения. Мне не понятно, почему (012) 345-67-89
является корректной выходной строкой для маски (###) #99-99-99
, но по какой то причине НЕ является корректной входной строкой. Т.е. если я решил сохранить ввод пользователя и при следующем показе диалога подставляю сохраненное значение, то пользователь получает не то, что он вводил до этого.
Давайте сравним посимвольно:
(###) #99-99-99
(012) 345-67-89
После закрывающей скобки в маске и строке пробелы - совпадает. Следующий символ в маске - #
, а в строке - 3
, также совпадает, поскольку #
"позволяет вводить в данную позицию строки ввода цифры, пробел и знак минуса". Последующие символы также совпадают. Поясните, где у меня логическая ошибка?
Непонятна работа DI_FIXEDIT
Posted: Tue 04 Jul, 2017 06:29
by Shmuel
Dec wrote: ↑Mon 03 Jul, 2017 23:16После закрывающей скобки в маске и строке пробелы - совпадает.
Алгоритм устроен не так. Символы в строке маски, не являющиеся "особыми", не сопоставляются с символами входной строки, они являются просто "обрамлением" для действительной информации в выходной строке. Пробел в маске не сопоставляется с пробелом во входной строке, он просто вставляется в выходную. Следующий символ маски # сопоставляется с пробелом во входной строке, вставляя и его.
Я не утверждаю, что существующий алгоритм - единственно правильный и т.п. Но так он работает. Во избежание недоразумений - это не я его писал. Смотрите его реализацию в функции Edit::SetString (файл edit.cpp).
Непонятна работа DI_FIXEDIT
Posted: Tue 04 Jul, 2017 09:06
by Dec
Сейчас все понял, спасибо. Я бы сказал, что было выбрано весьма своеобразное решение.