06.12.2003, 19:09 | #1 |
Участник
|
Динамическое создание объектов на формах
Кто-нибудь может объяснить вот такой код:
(это пример из формы 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 |
Дмитрий Ерин
|
Рискну объяснить
Попробую объяснить, хотя сам еще в этом деле плаваю. Очень надеюсь, что профи поправят, если что не так.
Каждой форме в АОТ соответствует определенный узел в разделе Forms. Если этот узел раскрыть, то увидим три дочерних узла: Methods, Data Sources и Designs. Так вот, относительно приведенного куска кода: form - это собственно сам "корневой" узел в АОТ. То есть этот класс отвечает за форму "в общем смысле". метод form.design() - возвращает нам объект класса FormBuildDesign, который уже отвечает за дизайн формы, то есть за ее внешний облик (а добавление контролов относится именно к дизайну). Ну, а дальше идет добавление собственно контрола на дизайн формы. Для справки: у формы есть аналогичный метод для получения ДатаСорса: public final FormBuildDataSource dataSource(int _dataSourceNo) А вот зачем в названиях этих классов присутствует слово Build, точно пока сказать не могу Надо будет почитать в Best Practices. |
|
08.12.2003, 10:12 | #3 |
Участник
|
К счастью я это все и так хорошо знаю
По крайней мере тут никаких секретов нет. Ладно, фиг с ним с этим кодом, имхо там последняя строчка просто лишняя Еще раз: Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать |
|
08.12.2003, 10:44 | #4 |
Дмитрий Ерин
|
Цитата:
Изначально опубликовано Prof
Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать Кстати, 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 |
----------------
|
FormControl & FormBuildControl
FormBuildControl - предназначен для доступа элементам формы, когда форма еще не проинициализирована. Т.е. будут происходит изменения в 'дизайне' формы, как будто вы её изменяете в AOT
FormControl - предназначен для доступа к элементам уже проинициализированной формы (даже уже открытой) Для примера использования Build-классов можно посмотреть методы в классах SysWizard.prompt(), SysTableBrowser.showAllFields() |
|
08.12.2003, 15:42 | #6 |
Moderator
|
Цитата:
Непонятно как взаимодействуют классы типа form и formbuild, в каком случае что надо использовать
Как я понимаю, основное различие между этими классами в том, что FormControl можно получить из экземпляра формы с дизацном созданным в АОТ, а FormBuildControl – это класс конрола, созданного динамически, то есть не присутствующего в АОТ. Вот маленький пример: PHP код:
ComboBox2, напротив, был создан динамически, в коде программы и класс Dialog позволяет обратиться к нему, только как к наследнику класса FormBuildControl. Но наследники FormBuildControl не имеет всех тех необходимых методов и свойств, которые присутствуют в наследниках FormControl. Поэтому, часто возникает необходимость “получения FormControl на основе имеющегося FormBuildControl”. Для этого необходимо проинициализировать класс диалога – при этом иничиализируется член formRun, а затем используя его метод design() получить доступ к экземпляру класс FormDesign, а следовательно и к наследникам FormControl. |
|
|
За это сообщение автора поблагодарили: samolalex (1). |