24.08.2021, 07:22 | #1 |
Участник
|
Ax2012, итерация контролов на форме с учетом персонализации
Коллеги, вот такой вопрос.
Есть форма, хочу перебрать контролы и, скажем, поменять метку. Перебор реализован, например таким рекурсивным методом, который первый раз вызывается без параметров в .init() формы перед super(). X++: public void setControls(FormBuildControl _control = null) { int ctrlCount; int ctrlIdx; FormBuildControl fbc; if (_control) { ctrlCount = _control.controlCount(); for (ctrlIdx = 1; ctrlIdx <= ctrlcount; ctrlidx++) { fbc = _control.controlNum(ctrlIdx); element.setlabel(fbc); if (fbc.iscontainer() && fbc.controlcount()) { element.setcontrols(fbc); } } } else { ctrlcount = element.form().design().controlCount(); for (ctrlIdx = 1; ctrlIdx <= ctrlcount; ctrlidx++) { fbc = element.form().design().controlNum(ctrlIdx); element.setlabel(fbc); if (fbc.iscontainer() && fbc.controlcount()) { element.setcontrols(fbc); } } } } Для стандартных контролов все работает ОК. Но если я добавлю на форме поле через персонализацию - то для него не срабатывает. Как можно в рантайме к этим полям обратиться? Ну, скажем, в персонализацию я, наверно, могу через параметры пользователя залезть, а как из неё получить конкретный контрол на форме как объект? |
|
24.08.2021, 08:27 | #2 |
Участник
|
Ну, все правильно.
Есть formBuildDesign (вы его получаете через element. Form(). Design()) и formBuildControl c наследниками formBuildXXXcontrol Все они относятся к дизайну, т. Е. К тому макету который запланирован, как будет выглядеть форма и создан на этапе разработки. А в рантайме используется то что получилось. Смотрите классы без Build в имени. Дизайн для рантайма можно получить как element. Design() И обратите внимание на тип возвращаеиого значения. |
|
|
За это сообщение автора поблагодарили: Pandasama (2). |
Теги |
ax2012, form, form control, form design, formbuildcontrol, formcontrol |
|
|