|
서브 Form들을 한번만 생성하는것이 목적인가요?
방법1. :: 동적으로 생성하지 않는다.
1. 동적으로 생성하지 말고 그냥 Project Optios-> Forms 에서 sub폼들을 Auto-Create Forms에 넣어두세요
Form1 //Main Form
Form2 //Sub Form
Form3 //Sub Form
2. 그리고 이미지 또는 버튼을 클릭했을때
그냥 new 하지 마시고 Form2->Show(); , Form2->ShowMdal();
Form2,Form3 에서 Close하더라고 OnClose때 Action=caFree 로 하지 않으면 ..
다시 말해 서버폼을 Close할때 메모리에서 지우지 않으면
계속 그냥 Form2->Show(); , Form2->ShowMdal(); 만 하시면 됩니다.
방법2. 동적으로 생성하고 폼이 닫힐때 죽인다.(메모리에서 삭제한다)
1. 동적으로 생성하지 않는다면 서브폼을 생성할대 Owner로 Main폼을 주시구요
Form2=new TForm2(Form1); 또는
Form2=new TForm2(this); //
//이런식으로 하면 Owner인 this나 Form1이 죽을때 Form2도 같이 죽습니다.
2. 그리고 서브폼의 Close이벤트에서 Action=caFree로 해주십시요 //죽을때 스스로 메모리에서 삭제되는 방법
그러면 서브폼이 Close될때 스스로 알아서 죽습니다.(메모리에서 삭제 됩니다.)
이런 경우 계속 새롭게 new해도 상관없죠
방법3. 동적으로 생성하되 폼이 닫힐때 죽이지 않고 계속활용한다.
1. Image나 Button을 클릭할대 서브폼 Form2나 Form3를 생성하는 부분에서
서버폼 포이터가 NULL인경우만 새롭게 생성해주면 됩니다.
그러면 같은 종류의 서브폼은 딱한번만 생성되죠
void __fastcall Form1::Image1Click(TObject *Sender)
{
if(Form2==NULL)Form2=new TForm2(this);
Form2->Show();
}
void __fastcall Form1::Image2Click(TObject *Sender)
{
if(Form3==NULL)Form3=new TForm3(this);
Form3->Show();
}
2. 이경우 서브폼이 Close될때 아무것도 하지 마십시요
서브폼 Close이벤트에서 Action에 caFree로 하면 안됩니다.
아야 님이 쓰신 글 :
: 안녕하세요....
: 또 이렇게 질문을 올리게 되었습니다.. m( - -)m
:
: 메인 윈도우( 고정임)에서 배치된 이미지 를 클릭하면 다른 동적 윈도우가 열려, 서브윈도우에서 실제로 여러가지 동작이 이루어집니다 ... <------ ( 하나의 서브폼에대해 여러가지 이미지를 클릭)
: 또다른 이미지를 클릭해서 동일서브폼에서 여러가지 작업을함...
:
: 근데 서브폼을 종료시킬려고 하니깐 이런!!!!! 이미지를 클릭한 수만큼 종료실행을 해야만 했습니다...
:
: 그래서 mutex오브젝트을 작성해서 이중기동을 방지하고 싶은데...메인폼이랑 서브폼간의 연결이 잘 안됩니다...
: 메인폼은 고정이니깐 서브폼에서mutex작성해 이미지클릭해서 생성된 서브폼이 닫히지 않는한 다른 서브윈도우를 안 열리게 하고싶은데요....
:
: 안되요....며칠간 책을 찾아보고 인터넷으로 알아봤는데 ...... m( - - )m
:
:
: 후덥지근한 날씨에 건강 해치지 않도록 조심하세요 ^^/
|