C++Builder Tips


フォーム・動的に作成・廃棄


Form1をメインフォーム、Form2を選択可能なフォームとしてButton1をクリックするとForm2を作成、Buton2をクリックするとButton1で作成されたフォームを全て廃棄します。
//---------------------------------------------------------------------------
// Unit1.h
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE 管理のコンポーネント
  TButton *Button1;
  TButton *Button2;
  void __fastcall Button1Click(TObject *Sender);
  void __fastcall Button2Click(TObject *Sender);
  void __fastcall FormCreate(TObject *Sender);
  void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private:
public: // ユーザー宣言
  TList* mlstFrm; // ユーザー宣言
  __fastcall TForm1(TComponent* Owner);
};

//---------------------------------------------------------------------------
// Unit1.cpp
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
  
mlstFrm = new TList;
}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
  delete mlstFrm;
  mlstFrm = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //Form2を生成します。
  TForm2 *frm = new TForm2(this);
  
mlstFrm->Add(frm);
  frm->Show();
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  //生成した全てのForm2を破棄します。
  TForm2 *frm;

  for (int i=0;i<mlstFrm->Count;i++){
     frm = (TForm2*)mlstFrm->Items[i];
     delete frm;
     frm = NULL;
  }
  
mlstFrm->Clear();
}
//---------------------------------------------------------------------------
// Unit2.cpp
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  TForm1 *frm = (TForm1*)Owner;

  frm->mlstFrm->Delete(frm->mlstFrm->IndexOf(this));
}
//---------------------------------------------------------------------------


DownLoad bcbtips020.lzh 5KB(BCB5)