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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[840] [VCL] 동적 컨트롤 생성 1
장성호 [nasilso] 10387 읽음    2009-01-08 11:52
VCL에서 동적으로 Control생성하는것은 쉽다.

C++Builder에서는 new  , Delphi에서는 Create 하면 된다.

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TButton *btn=new TButton(this);
    btn->Left=10;
    btn->Top=10;
    btn->Caption="버튼";
}


위 코드에 중요한것 2가지가 빠져있다.

첫째로는 위치좌표는 잘 잡아줬지만.. 보여질 Parent 를 정해주지 않았다.
동적컨트롤 생성시 Parent 할당
void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TButton *btn=new TButton(this);
    btn->Left=10;
    btn->Top=10;
    btn->Caption="버튼";
    btn->Parent=Panel1;
}



동적생성 컨트롤의 이벤트 할당

두번째로
컨트롤을 생성하여 그냥 화면에 보여지기만 하면 되는 컨트롤이라면 상관없지만
Button처럼 클릭에 무엇인가 동작하게 하려면
이벤트 핸들러를 걸어줘야 한다.

문론 함수는 미리 만들어 둬야 하구..

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TButton *btn=new TButton(this);
    btn->Left=10;
    btn->Top=10;
    btn->Caption="버튼";
    btn->Parent=Panel1;
    btn->OnClick=  Button1Click ;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     ShowMessage(((TButton*)Sender)->Caption+" 클릭!");     
}



초보자의 경우 컨트롤은 new해서 생성한후에
Parent를 정해주지않아 화면에 안보이거나
이벤트를 걸어주지 못해 헤메는 경우를 왕왕 보곤한다.

추가 : 09-01-12
동적생성 Control에 대해 FindComponent 사용하기

앗참 만약에 동적으로 생성한 Component나 Control의 경우
FindComponent 로 찾으려고 할경우  그냥은 찾아 지지 않습니다.

왜냐하면 동적으로 생성할경우 Component의 이름이 정해지지 않기때문입니다.

이경우 직접 중복되지 않는 이름으로 정해주면 됩니다.
   btn->Name = "Button1";
//또는
btn->Name = "Button_"+ IntToSTr(idx);



그리고 Form의 경우 자동으로 Name이 생성되기도 하는데
만약 class가 TForm2 인경우
Form2 , Form2_1 , Form2_2 , ...등으로 이름이 자동으로 정해집니다.

그럼..

+ -

관련 글 리스트
840 [VCL] 동적 컨트롤 생성 1 장성호 10387 2009/01/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.