중복으로 생성해서 사용하는게 아니면, TForm1클래스의 생성자나 상속된 TForm클래스의 OnCreate, OnShow 등의 이벤트에서
TForm2를 한번만 생성하고, Form1의 버튼 이벤트에는 Form2->Show()만 넣으면 가장 쉬울텐데...
이렇게 할 수 없는 상황인가보죠?
그렇다면... 아래와 같은 방법도 있습니다.
//---------------------------------------------------------------------------
TForm2 *Form2=0;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (Form2==0) {
Form2 = new TForm2(this);
Form2->OnClose=Form2Close;
Form2->Show();
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Form2Close(TObject *Sender, TCloseAction &Action)
{
delete Form2;
Form2=0;
}
//---------------------------------------------------------------------------
TForm2 의 OnClose 함수를 TForm1에서 정의 하여, TForm2를 생성하는 시점에 OnClose함수를 연결해줍니다.
이렇게하면 TForm1의 변수나 함수를 TForm2에서도 쓸 수가 있기 때문에 종료하는 시점에 변수를 변경 할 수 있죠.
Application->CreateForm(__classid(TForm2), &Form2); 대신
Form2 = new TForm2(this); 를 쓴 이유는...
저 문법을 제가 몰라서 입니다. ㅎㅎ...
Application->CreateForm(__classid(TForm2), &Form2);을 써도 되긴 하더군요.
그럼...
자비를 님이 쓰신 글 :
: 제가 지금 할려는건 form1에서 버튼을 누르면 form2가 열리는 것을 하려고 합니다.
: 그래서 form1의 버튼을 누르면 Application->CreateForm(__classid(TForm2), &Form2);을 이용해 form2를 열도록 하였습니다.
:
: 그런데 이 함수게 form을 새로 생성하는거라 버튼을 계속 누르면 누르는 만큼 form을 생성해서 조건문을 둬서 temp가 0일때만 생성하고 생하고나면 1로 바꿔주는데 이게 form2가 종료되면 이 변수의 값도 다시 0으로 변경해줘야 하는데 form2의 종료를 확인 하는 법을 모르겠어요... 확인 방법이 있으면 좀 알려주세요...
:
: 그리고 혹시나 지금 제가 하려는 방법중에 다른 방법이 있다면 알려주시면 고맙겠습니다.
|