Вопрос 882 прислал
Sladius: Пишу на BCB 6. Такие дела: статически создается главная форма
из нее динамически создается вторая форма. Из второй формы динамически создается
третья форма. Теперь вопрос: как мне вызвать в третьей форме что-нибудь из
второй?
Вопрос 880 прислал Sladius: Пишу на ВСВ 6.0. Хочу конкретизировать
свой вопрос так как я его задал не корректно. создание 2 и 3 формы происходит
динамически следующим методом из cpp файла удаляется строчка TForm2 *Form2;
h файла удаляются строчка extern PACKAGE TForm2 *Form2;
в свойствах проекта форма переносится в available form форма создается
динамически следующим образом:
TForm2 * Form2=new TForm2(0);
try
{
Form2->ShowModal();
}
__finally
{
delete Form2;
}
Таким же образом создается и третья форма. Я ничего не могу вызвать третьей
формой из второй.
Давайте создадим
самое простое тестовое приложение в котором есть основная форма
Form1 и две динамические, Form2
и Form3. Поместим на Form1
двакомпонента Edit, Label
и Button. На Form2
поместим два компонента Edit, два компонента
Label и два компонента Button.
На Form3 поместим два компонента
Edit, Label и Button. В инспекторе объектов
присвоим свойствам "Caption" и
"Text" соответствующие значения, примерно как на рисунке 1.
Рисунок 1. Формы в процессе проектирования.
В обработчике нажатия кнопки для
Form1 напишем:
Form2 = new
TForm2(this);
Form2->Label1->Caption = Edit1->Text;
Form2->ShowModal();
Form2->Free();
В обработчике нажатия
Button1 для Form2:
Form1->Edit2->Text
= Edit1->Text;
В обработчике нажатия
Button2для Form2:
TForm3 *Form3 =
new TForm3(this);
Form3->Label1->Caption = Edit2->Text;
Form3->ShowModal();
Form3->Free();
Для
Button1 Form2 и Form3
установим свойство ModalResult в
mrOk. В опциях проекта перенесем Form2 и
Form3 из Auto-create forms в
Available forms как показано на рисунке 2.
Рисунок 2. Окно "Свойства
проекта".
В модуль Unit1.cpp
добавим заголовочный файл Form2:
#include "Unit2.h"
и объявим внешнюю глобальную переменную:
extern
TForm2 *Form2;
Так как Form2 и
Form3 будут передавать данные в
Form1, добавим в модули Unit2.cpp и
Unit3.cpp заголовочный файл Form1:
#include "Unit1.h"
Незабываем добавить в модуль Unit2.cpp
заголовочный файл Form3:
#include "Unit3.h"
а в модуль Unit3.cpp заголовочный
файл Form2:
#include "Unit2.h"
В листингах приведен полный текст модулей
Unit1, Unit2 и Unit3