AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.04.2002, 15:19   #1  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
получение информации о форме
В методе определенной формы мне нужно получить инфу о другой форме.
Ну например для формы SysSetupWizard мне необходимо узнать имена объектов (контролов) и их ID.
Как это можно сделать?

Это я уже написал

FormRun formrun;
str FormName;
Args args;

args = new Args(FormName);
formrun = new FormRun(args);
formrun.init();
Старый 26.04.2002, 16:11   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Что-то типа этого:

...
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  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
блин, надо же работает , да еще как !
Спасибо огромное!
Старый 27.04.2002, 16:09   #4  
andreynikolai is offline
andreynikolai
Участник
 
133 / 10 (1) +
Регистрация: 11.04.2002
беда в том , что с помощью controlCount и controlNum(i) получаем доступ к контролам только верхнего уровня. А как получить доступ к элементам контрола если он сам содержит вложенные контролы, например Grid ???
Старый 07.05.2002, 11:48   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Есть решение!
Посмотрите в качестве примера класс SysHelpGenerateForm.
Там помимо FormControl используется также класс FormBuildControl (доступ к нему через formRun.form().design().control(FormControl.id()) ), у которого есть методы isContainer() и controlCount(), что позволяет организовать цикл внутри контейнеров, получать объекты FormBuildControl и конструкцией
formRun.design().control(FormBuildControl.id()) переходить при необходимости к FormControl.
Старый 19.08.2021, 14:27   #6  
danov.86 is offline
danov.86
Участник
 
25 / 13 (1) ++
Регистрация: 16.08.2012
Вот мой пример перебора контролов формы может кому ни будь будет полезно
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  
axm2017 is offline
axm2017
Участник
 
1,890 / 295 (13) ++++++
Регистрация: 15.05.2017
https://dynamicsuser.net/ax/b/dynami...rm-control-ax7
Тут слегка иначе ищут элемент по имени.
Но не проверял.
Старый 20.08.2021, 05:23   #8  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от andreynikolai Посмотреть сообщение
А как
Метод обхода дочерних контролов использовать рекурсивно при результате controlCount() > 0 на тек. контроле
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 20.08.2021 в 05:38.
Старый 20.08.2021, 07:00   #9  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ну и, классика: Итератор с поддержкой методов обратного вызова для обработки контролов на форме
Правда не думаю, что ответа с 2002 года ждут.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как мне обновить Grid расположенный на другой форме? Yuri Safronov DAX: Программирование 17 22.01.2013 14:18
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
Как не выводить заголовки в форме, если нет строк? DreamCreator DAX: Программирование 9 29.05.2008 15:10
Добавление источника к запросу на форме Lucky13 DAX: Программирование 1 21.05.2007 17:12
Отличия в строках ReqPO, почему одна строка появляется в форме а другая нет (Master Planning, Planned Orders) rkorchagin DAX: Программирование 8 21.02.2007 16:27

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 01:29.