C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54475] Re:폼위의 동적으로 생성된 모든 컴포넌트를 지우기?
장성호 [nasilso] 1780 읽음    2008-09-03 03:38
먼저 간단히 답변을 하면 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로 지울수도 있는데...그보다 그냥 모든 컴포넌트를 일괄적으로
: 지울수 있는 방법이 있나 궁금합니다...
:
:
: 수고하세요..

+ -

관련 글 리스트
54474 폼위의 동적으로 생성된 모든 컴포넌트를 지우기? linuxman 1071 2008/09/03
54475     Re:폼위의 동적으로 생성된 모든 컴포넌트를 지우기? 장성호 1780 2008/09/03
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.