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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.12.2003, 19:09   #1  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
Динамическое создание объектов на формах
Кто-нибудь может объяснить вот такой код:
(это пример из формы tutorial_Form_AddControl)

FormBuildDesign formBuilddesign = form.design();
FormBuildGroupControl formBuildGroupControl;
formStringControl c;
;
c = addGroup.addControl(FormControlType::STRING,'RunTimeControl');
c.label("New control");

formBuildGroupControl = formBuildDesign.control( addGroup.id() );

Непонятно как взаимодействуют классы типа form<controlname> и formbuild<controlname>, в каком случае что надо использовать
Старый 08.12.2003, 09:32   #2  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Рискну объяснить
Попробую объяснить, хотя сам еще в этом деле плаваю. Очень надеюсь, что профи поправят, если что не так.
Каждой форме в АОТ соответствует определенный узел в разделе Forms. Если этот узел раскрыть, то увидим три дочерних узла: Methods, Data Sources и Designs.
Так вот, относительно приведенного куска кода:
form - это собственно сам "корневой" узел в АОТ. То есть этот класс отвечает за форму "в общем смысле".
метод form.design() - возвращает нам объект класса FormBuildDesign, который уже отвечает за дизайн формы, то есть за ее внешний облик (а добавление контролов относится именно к дизайну).
Ну, а дальше идет добавление собственно контрола на дизайн формы.

Для справки: у формы есть аналогичный метод для получения ДатаСорса:
public final FormBuildDataSource dataSource(int _dataSourceNo)

А вот зачем в названиях этих классов присутствует слово Build, точно пока сказать не могу Надо будет почитать в Best Practices.
Старый 08.12.2003, 10:12   #3  
Prof is offline
Prof
Участник
 
732 / 64 (4) ++++
Регистрация: 18.10.2002
Адрес: Москва
К счастью я это все и так хорошо знаю
По крайней мере тут никаких секретов нет.
Ладно, фиг с ним с этим кодом, имхо там последняя строчка просто лишняя
Еще раз:
Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать
Старый 08.12.2003, 10:44   #4  
Ruff is offline
Ruff
Дмитрий Ерин
Аватар для Ruff
1C
 
475 / 396 (14) ++++++
Регистрация: 18.09.2003
Адрес: Тула
Цитата:
Изначально опубликовано Prof
Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать
IMHO, берешь похожий на поставленную задачу пример, и делаешь все аналогично. А в суть въезжать иногда даже вредно Разработчики могли и откровенно намудрить со структурой классов - так что же нам из-за этого голову ломать?

Кстати, Developer's Guide читал?
Цитата:
From an overall point of view, the forms fall in two categories: form build classes and form run classes. As the names indicate, the build classes are the ones used during the visual creation of a form, while the run classes are used during execution.
Мало что понятно, конечно... Остается изучать исходники
Старый 08.12.2003, 10:46   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
FormControl & FormBuildControl
FormBuildControl - предназначен для доступа элементам формы, когда форма еще не проинициализирована. Т.е. будут происходит изменения в 'дизайне' формы, как будто вы её изменяете в AOT
FormControl - предназначен для доступа к элементам уже проинициализированной формы (даже уже открытой)

Для примера использования Build-классов можно посмотреть методы в классах SysWizard.prompt(), SysTableBrowser.showAllFields()
Старый 08.12.2003, 15:42   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать
Добавлю.

Как я понимаю, основное различие между этими классами в том, что FormControl можно получить из экземпляра формы с дизацном созданным в АОТ, а FormBuildControl – это класс конрола, созданного динамически, то есть не присутствующего в АОТ.

Вот маленький пример:

PHP код:
void clicked()
{
    
FormDesign                  formDesign;
    
FormControl                 formControl;
    
FormStringControl           formStringControl;
    
FormComboBoxControl         formComboBoxControl;

    
Dialog                      dialog;
    
FormBuildDesign             formBuildDesign;
    
FormBuildControl            formBuildControl;
    
FormBuildComboBoxControl    formBuildComboBoxControl;
    
FormRun                     formRun;
    ;
    
formDesign element.design();
    
formControl formDesign.controlName("StringEdit");
    
formStringControl formControl;
    
formStringControl.text("Hello");

    
formControl formDesign.controlName("ComboBox");
    
formComboBoxControl formControl;
    
formComboBoxControl.add("one");
    
formComboBoxControl.add("two");
    
formComboBoxControl.add("three");

    
dialog = new Dialog();
    
formBuildDesign dialog.formBuildDesign();
    
formBuildControl formBuildDesign.addControl(FormControlType::ComboBox"comboBox2");
    
formBuildComboBoxControl formBuildControl;

    
dialog.doInit();    // !!!
    
formRun dialog.formRun();
    
formDesign formRun.design();
    
formComboBoxControl formDesign.controlName("comboBox2");
    
formComboBoxControl.add("one");
    
formComboBoxControl.add("two");
    
formComboBoxControl.add("three");

    
dialog.run();

Здесь StringEdit и ComboBox – это контролы созданные на дизайне формы в АОТ’е. Соответственно, мы можем к ним обратиться, как к классам – наследникам FormControl.

ComboBox2, напротив, был создан динамически, в коде программы и класс Dialog позволяет обратиться к нему, только как к наследнику класса FormBuildControl.

Но наследники FormBuildControl не имеет всех тех необходимых методов и свойств, которые присутствуют в наследниках FormControl. Поэтому, часто возникает необходимость “получения FormControl на основе имеющегося FormBuildControl”. Для этого необходимо проинициализировать класс диалога – при этом иничиализируется член formRun, а затем используя его метод design() получить доступ к экземпляру класс FormDesign, а следовательно и к наследникам FormControl.
За это сообщение автора поблагодарили: samolalex (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Динамическое создание DataSource на форме, и добавление элементов дизайна. epack DAX: Программирование 12 24.11.2010 15:31
Динамическое создание метода. HorrR DAX: Программирование 23 19.02.2008 14:44
Создание проекта из объектов созданных на данном слое Asterisk DAX: Программирование 3 10.10.2006 13:38
Динамическое создание элементов дизайна на Web-формах AvrDen DAX: Программирование 0 04.08.2005 12:58
Динамическое создание меню ta_and DAX: Программирование 7 18.07.2005 19:28

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

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

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