|
프로젝트 옵션에서 Forms에 가서 보면.. auto create forms 항목에 자신이 생성하려는 폼이 있는지 먼저 확인하세요.
혹시라도 거기에 등록되어 있다면 별도의 생성은 필요가 없죠.
그런 경우엔 단순히
if (frmMyForm->Visible)
frmMyForm->Hide();
else
frmMyForm->Show();
이렇게 해 주시면 됩니다. 폼이 자동 생성되기 때문에..
그렇게 하고 싶지 않다면 메인폼에 멤버로
TfrmMyForm *Dlg1;
이런 식으로 선언해 주고(동일 클래스의 폼이 다수라면 리스트 등으로 관리해야 할겁니다.)
메인폼 컨스트럭터에
Dlg1 = NULL;
등으로 초기화 해 주고
버튼 이벤트에는
if (Dlg1 == NULL)
Dlg1 = new TfrmMyForm(this);
if (Dlg1->Visible)
Dlg1->Hide();
else
Dlg1->Show();
이렇게 해 주시면 됩니다.
사실 이렇게까지만 해 둬도 메모리 릭은 일어나지 않습니다. 왜냐... TControl상속받은 것들은 메모리 해제를 Owner가 처리해 주기 땜시...
바뜨 그러나.. 버릇을 이렇게 들여놓으면 안좋을 수도 있기 땜시
메인폼 디스트럭터나 메인폼의 OnDestroy 이벤트에
if (Dlg1)
delete Dlg1;
요렇게 넣어주시면 되겠네요.
하안인 님이 쓰신 글 :
: 메인폼에서 버튼을 누르면 그에 해당되는 폼이 있으면(전에 열려있었으면
: 닫을때 Visible=false로) 보여주고 없으면 생성하려면
: 폼이 생성되었나 안되었나 체크하는 메소드는 어떤것인가요.
:
: 프로그램에서 해당되는 버튼을 폼마다 다 넣어주려고 하니
: showmodal로 해서는 안 되어서 클릭시 폼이 생성되었나
: 안되었나 체크하여 보여주려고 합니다.
:
:
|