C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Динамическое создание, и удаление форм
mxn
  Отправлено: 10.10.2006, 15:50


Ученик-кочегар

Группа: Участник
Сообщений: 12



Господа, подскажите пожалуйста!

Есть проект с двумя формами.

В опциях проекта во вкладке Forms в разделе Auto-create forms находится форма Form1, а форму Form2 я перенес в Available forms.
То есть Form2 не загружается в память при загрузке проги.

При нажатии на кнопку находящуюся на Form1 выполняется код:

TForm2 * Form2;
Application->CreateForm(__classid(TForm2),&Form2);
Form2->Show();

В результате загружается Form2 — все отлично.

Вопрос: правильна ли такая техника поведения с формами и как ВЫГРУЗИТЬ Form2 из памяти после ее закрытия ???
olegenty
Отправлено: 10.10.2006, 15:54


Ветеран

Группа: Модератор
Сообщений: 2412



правильна, но никак не выгрузить.

целесообразнее пара new/delete, либо обёртка в auto_ptr, либо другой интеллектуальный указатель
PetVlad
Отправлено: 11.10.2006, 10:04


Ученик-кочегар

Группа: Участник
Сообщений: 2



... Form1Create (...)
{
Button1->Caption = "Create new Form2";
Button2->Caption = "Delete Form2";
}
... Button1Click(...)
{
TForm2 *frm = new TForm2( this); //можно для Form2 писать новые конструкторы и передавать параметры
frm->Caption = "Form2";
}
...Button2Click(...)
{
TForm2 *frm;
for( int i=0; i< MDIChildCount; i++) //MDIChildCount точно не уверен
{
if( MDIChildren[i]->Caption == "Form2")
{
frm = (TForm2 *) MDIChildren[i];
delete frm;
break;
}
}
}
//С вариациями разберешься сам
mxn
Отправлено: 11.10.2006, 10:40


Ученик-кочегар

Группа: Участник
Сообщений: 12



Есть форма и на ней множество элементов управления. И при таком подходе:

TForm2 *frm = new TForm2( this);
...

отображается ПУСТАЯ форма.

Правильно ли будет сделать так:

Application->CreateForm(__classid(TSettingsForm),&SettingsForm);
...

а в событии OnClose формы SettingsForm прописать:

Action = caFree;

Так правильно? Форма действительно будет выгружаться?
olegenty
Отправлено: 11.10.2006, 14:34


Ветеран

Группа: Модератор
Сообщений: 2412



да.
но (IMHO) это как-то кривовато. но только IMHO.

предпочитаю код, минимально привязанный к фишкам реализации borland, и максимально привязанный к stl/boost
mxn
Отправлено: 11.10.2006, 15:59


Ученик-кочегар

Группа: Участник
Сообщений: 12



Все понял. Большое спасибо!
А до STL и BOOST я еще не дорос... :-)

Вернуться в Вопросы программирования в C++Builder