Меня устрит любой тип регулярных выражений, который поддерживается Terrasoft-ом.
NumericEdit - не совсем удачный контрол, если мне не нужно чтобы по умолчанию в поле проставлялся 0.
Есть проблема: если я задаю маску в формате \d+ и потом программно пытаюсь контролу задать значение, например:
CountryCode.Value = countryCode;
или
CountryCode.Value = 1 * countryCode;
где countryCode - в принципе строка, содержащая цифры - в поле ничего не отображается.
Не могли бы Вы подсказать правильный способ решения проблемы?
Спасибо!
А какая у Вас версия Terrasoft? У меня не получилось воспроизвести проблему в 3.3.2.198 - все отлично отображается в контроле. Возможно, проблему удастся решить промто обновлением сборки.
Исходя из предоставленной информации, могу посоветовать попробовать конвертировать строку в число перед присвоением:
CountryCode.Value= parseInt(countryCode);
Если не получится, предоставьте, пожалуйста, сервисы карточки и скрипта карточки.
Версия бинарников 3.3.2.217
Попробовал конвертировать строку данной функцией (parseInt) - не помогло, все равно контрол становится пустым и срабатывает событие OnChange.
Пример кода в аттачменте.
Если можно, один вопрос не по теме.
Привязать событие к контролу можно так:
SetObjectEventDispatcher(Window, Button, ButtonName, 'OnClick', 'OnNewButtonClick');
А как отвязать событие (это нужно едвали не чаще, чем привязывать события, например если мы хотим отследить, были ли внесены изменения в форму, то нужно прицепить события OnChange к каждому контролу, а затем, при первом срабатывании еветна нужно отрегистрировать)?
При MaskKind emkRegExpr - цифры не вводятся вообще, и, соответственно, не присваиваются.
При MaskKind emkRegExprEx - вводятся и присваиваются корректно.
Ваши сервисы требуют дополнительного анализа. В качестве временного решения могу предложить заполнять поля данными на событие OnActivate.
Что касается SetObjectEventDispatcher - рекомендую просто создать счетчик и при первом срабатывании инкрементировать его, а непосредственно внутри события проверять счетчик и не запускать последующий код на исполнение, если счетчик больше нуля.