먼저 간단히 답변을 하면 Parnet되는 Control인 Form을 delete하기만 하면 됩니다.
@예제
TForm2 *frm=new TForm2(Application);
for(int i=0;i<100;i++)
{
TButton *btn=new TButton(frm); //생성자에 Owner 로 frm을 넘겨줌
btn->Parnet=frm;
...
}
frm->ShowModal();
delete frm; //frm이 delete될때 button 100개를 비롯해 frm위에 있는 모든 Control들이 delete됨
@설명
위와같이 Button new할때 넘겨준 파라메타로 TForm2형의 frm을 넘겨줬습니다.
TComponent를 상속받은 Component 및 Control들은
모두 생성자 파라메터로 Owner를 받습니다.
TComponent 클래스 생성자에서 Owner란
Owner즉 주인을 뜻하는 것으로써
주인(Owner)이 사망(free , delete)할 때 종들도 모두 같이 매장(free 또는 delete)합니다.
위의 경우
TForm2 형인 frm이 delete되면
동적으로 100개 만든 Button들도 자동으로 delete된다는 것입니다.
결론적으로 TComponent를 상속받은 모든 Component들은
생성할때 Owner를 잘 정해주면 됩니다.
@추신
TCompoennt를 상속받은 컴포넌트중에서도 화면에 보지이 않은 것을 주로 컴포넌트라고 하고
화면에 보이는 것은 컨트롤이라고 주로 얘기합니다.
컨트롤중에서도
핸들이 있는 TWinControl을 상속받은 Control과
핸들이 없는 TGraphicControl을 상속받아서 만들어진 Control이 있습니다.
컨트롤에는 Owner 말고도 Parent라는 개념이 있습니다.
Parent라는것은
1차적으로 Control이 어디에 나타나는가 와 관계가 있습니다.
뿐만 아니라 Parent가 delete될때 Parent위에 있는 모든 Control들도 함께 delete됩니다.
즉 Owner와 똑같이 동작하죠
@참조
VCL(Delphi나 C++Builder) 을 잘 하려면 이 개념을 정확히 이해하고 있어야 합니다.
아래링키에 보면 Object-Pascal로 된 VCL소스를 참조하여 Owner와 Parent에 대 자세히 설명해 주고 있습니다.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tutorial&no=38
그럼
...
linuxman 님이 쓰신 글 :
: 안녕하세요...
:
: 동적으로 생성된 폼위에...동적으로 생성된
: 버튼,라벨,타이머,editbox등을 동적으로 생성했는데... 모든 컴포넌트를
: 콤포넌트 종류에 관계 없이...일괄적으로 지울수 있는 방법이 있나요?
:
: 생성했던 것을 모두 기억했다가..findComponet로 지울수도 있는데...그보다 그냥 모든 컴포넌트를 일괄적으로
: 지울수 있는 방법이 있나 궁금합니다...
:
:
: 수고하세요..