26.04.2002, 15:19 | #1 |
Участник
|
получение информации о форме
В методе определенной формы мне нужно получить инфу о другой форме.
Ну например для формы SysSetupWizard мне необходимо узнать имена объектов (контролов) и их ID. Как это можно сделать? Это я уже написал FormRun formrun; str FormName; Args args; args = new Args(FormName); formrun = new FormRun(args); formrun.init(); |
|
26.04.2002, 16:11 | #2 |
Moderator
|
Что-то типа этого:
... int fieldCnt , i; FormControl control; ... fieldCnt = formRun.design().controlCount(); for (i = 1; i <= fieldCnt; i++) { control = formRun.design().controlNum(i); ... } И делай с полученным control`ом все, что хочешь. |
|
26.04.2002, 16:26 | #3 |
Участник
|
блин, надо же работает , да еще как !
Спасибо огромное! |
|
27.04.2002, 16:09 | #4 |
Участник
|
беда в том , что с помощью controlCount и controlNum(i) получаем доступ к контролам только верхнего уровня. А как получить доступ к элементам контрола если он сам содержит вложенные контролы, например Grid ???
|
|
07.05.2002, 11:48 | #5 |
Moderator
|
Есть решение!
Посмотрите в качестве примера класс SysHelpGenerateForm. Там помимо FormControl используется также класс FormBuildControl (доступ к нему через formRun.form().design().control(FormControl.id()) ), у которого есть методы isContainer() и controlCount(), что позволяет организовать цикл внутри контейнеров, получать объекты FormBuildControl и конструкцией formRun.design().control(FormBuildControl.id()) переходить при необходимости к FormControl. |
|
19.08.2021, 14:27 | #6 |
Участник
|
Вот мой пример перебора контролов формы может кому ни будь будет полезно
FormControl getToDateControl(str _controlName) // поиск контрола на форме по имени { int i,y,fCnt; FormControl control, groupCtrl ; FormBuildControl controlBuild,buildCtrl; Object groupBuildObject,groupCtrlObject; FormControl ctrl; FormControl getcontrol; str name; FormControl getGroupControl(FormBuildControl _buildControl) { FormBuildControl controlBuildloc, buildCtrlloc; FormControl controlloc, groupCtrlloc ; Object groupBuildObjectloc,groupCtrlObjectloc; groupCtrlloc = element.design().control(_buildControl.id()); groupBuildObjectloc = _buildControl; controlBuildloc = this.form().design().control(groupCtrlloc.id()); fCnt = groupBuildObjectloc.controlCount(); // проверяем сколько вложенностей в полученном контроле for(y=1; fCnt>=y;y++) // перебервем все вложенности контрола { buildCtrlloc = controlBuildloc.controlNum(y); if (buildCtrlloc) ctrl = element.design().control(buildCtrlloc.id()); // получаем вложенный контрол controlBuildloc = this.form().design().control(ctrl.id()); if(controlBuildloc && controlBuildloc.isContainer()) // смотрим есть ли во вложенном контроле вложенности { ctrl = getGroupControl(controlBuildloc); // отправляем на рекурсию if(ctrl != null) return ctrl; } else { if(ctrl.name() == _controlName ) // если вложенностей нет проверяем имя контрола с искомым контролом return ctrl; else return null; } } } ; for(i=1; element.design().controlCount()>=i;i++) //перебераем верхний уровень контролов { control = element.design().controlNum(i); controlBuild = this.form().design().control(control.id()); if(controlBuild && controlBuild.isContainer()) // проверяем есть ли в контроле вложенности { control = getGroupControl(controlBuild); // отправляем полученный верхний контрол в метод обработки if(control != null ) return control; } else { if(control.name() == _controlName ) // если вложенностей нет проверяем имя контрола с искомым контролом return control; } } return control; } Последний раз редактировалось danov.86; 19.08.2021 в 14:38. |
|
19.08.2021, 17:15 | #7 |
Участник
|
https://dynamicsuser.net/ax/b/dynami...rm-control-ax7
Тут слегка иначе ищут элемент по имени. Но не проверял. |
|
20.08.2021, 05:23 | #8 |
Мрачный тип
|
Метод обхода дочерних контролов использовать рекурсивно при результате controlCount() > 0 на тек. контроле
__________________
Мы летаем, кружимся, нагоняем ужасы ... Последний раз редактировалось TasmanianDevil; 20.08.2021 в 05:38. |
|
20.08.2021, 07:00 | #9 |
Участник
|
Ну и, классика: Итератор с поддержкой методов обратного вызова для обработки контролов на форме
Правда не думаю, что ответа с 2002 года ждут. |
|
|
|