Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Создание дочерней формы MDI


Автор: kabanoff 24.4.2008, 16:40
Друзья!

Я хочу чтобы при закрытии формы-родителя дочерняя форма закрывалась автоматом. Без обработчиков можно обойтись?

Мой код:
  TKlientChange *AKlientChange=new TKlientChange(this);
  AKlientChange->Show();

Автор: orthrus 24.4.2008, 17:59
можно сделать примерно так:

это для родительской формы:
Код

class TForm2 : public TForm
{
__published:    // IDE-managed Components
        TBitBtn *BitBtn1;
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
        void __fastcall BitBtn1Click(TObject *Sender);
private:    // User declarations
                std::vector<TForm3*> vec_tf;
public:        // User declarations
        __fastcall TForm2(TComponent* Owner);
};

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
 for (std::vector<TForm3*>::iterator i = vec_tf.begin(); i < vec_tf.end(); ++i)
     delete *i; //удаляем все дочерние окна
 Action = caFree;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
 vec_tf.push_back(new TForm3(this)); //при нажатии на кнопку создаем дочернюю форму и ложим указатель на нее в вектор
}

это дочерняя:
Код

class TForm3 : public TForm
{
__published:    // IDE-managed Components
        void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:    // User declarations
public:        // User declarations
        __fastcall TForm3(TComponent* Owner);
};

void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)
{
 Action = caFree;
}


Автор: Vyacheslav 24.4.2008, 18:52
Тупой вопрос: 
А что , она не закрывается ? smile Вы же owner'а указали при создании формы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)