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
[841] [VCL] 동적 컨트롤 생성 2
장성호 [nasilso] 8436 읽음    2009-01-08 12:11
기본적인 동적 컨트롤 생성방법은 바로 아래 팁에서  설명했구..
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=840

생성하는 컨트롤이 1개가 아니라 같은종류를 여러개 생성할때 변수 접근에 대해 얘기해 보겠습니다.


첫번째
보통 컨트롤이 같은것을 여러개 반복해서 생성할때는 배열을 사용합니다.
다름과 같이 배열 선언해놓고 생성한 컨트롤을 각 배열에 할당하죠

TEdit   *Edt[10];  //배열선언
void __fastcall TForm1::DynamicControl1()
{
    for(int i=0;i<10;i++)
    {
        Edt[i]=new TEdit(this);
        Edt[i]->Text="Edit"+IntToStr(i+1);
        Edt[i]->Left=i*100;
        Edt[i]->Top=0;
        Edt[i]->Width=90;
        Edt[i]->Parent=this;
    }
}



두번째
그런데 배열이 아니라 그냥 변수명으로 접근해서 사용하고 싶은경우도 있을것입니다.
다음과 같이 순차적으로 변수가 선언되어있다면
첫번째 변수의 주소를 이용하여 포인터로 접근할수 있습니다.

TLabel *StationNM1;
TLabel *StationNM2;
TLabel *StationNM3;
TLabel *StationNM4;
TLabel *StationNM5;
TLabel *StationNM6;
TLabel *StationNM7;
TLabel *StationNM8;
TLabel *StationNM9;
TLabel *StationNM10;
void __fastcall TForm1::DynamicControl2()
{
    TLabel *lbl;

    for(int i=0;i<10;i++)
    {
        lbl=new TLabel(this);
        lbl->Caption="StationNM"+IntToStr(i+1);
        lbl->Left=i*100;
        lbl->Top=50;
        lbl->Parent=this;
        *(&StationNM1+i)=lbl;   //포인터로 접근해서 생성된 컨트롤 할당 
    }
}
// 사용예
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     StationNM3->Caption=Edit1->Text;
     StationNM4->Caption=Edit1->Text;
     StationNM5->Caption=Edit1->Text;
}



세번째
두번째 방법과 같은 원리인데 포인터가 헷갈리면 배열로도 가능합니다.

TButton *Btn1;
TButton *Btn2;
TButton *Btn3;
TButton *Btn4;
TButton *Btn5;
TButton *Btn6;
TButton *Btn7;
TButton *Btn8;
TButton *Btn9;
TButton *Btn10;
void __fastcall TForm1::DynamicControl3()
{
    TButton **Btn;
    Btn=&Btn1;       //요렇게 해주면 
    for(int i=0;i<10;i++)
    {
        Btn[i]=new TButton(this);  //이렇게 배열로 ... 
        Btn[i]->Caption="Btn"+IntToStr(i+1);
        Btn[i]->Left=i*100;
        Btn[i]->Top=100;
        Btn[i]->Parent=this;
        Btn[i]->OnClick=DynamicBtnClick;
    }
}



네번째
세번째 방법을 좀더 응용해서..
TCheckBox *ChkBtn1;
TCheckBox *ChkBtn2;
TCheckBox *ChkBtn3;
TCheckBox *ChkBtn4;
TCheckBox *ChkBtn5;
TCheckBox *ChkBtn6;
TCheckBox *ChkBtn7;
TCheckBox *ChkBtn8;
TCheckBox *ChkBtn9;
TCheckBox *ChkBtn10;
TCheckBox **ChkArr=&ChkBtn1; //이런식으로 초기화를 해주면
void __fastcall TForm1::DynamicControl4()
{
    for(int i=0;i<10;i++)
    {
        ChkArr[i]=new TCheckBox(this);
        ChkArr[i]->Caption="CheckBox"+IntToStr(i+1);
        ChkArr[i]->Name=ChkArr[i]->Caption;
        ChkArr[i]->Left=i*100;
        ChkArr[i]->Top=150;
        ChkArr[i]->Width=90;
        ChkArr[i]->Parent=this;
        ChkArr[i]->OnClick=DynamicCheckBoxClick;
    }
}
//다음과 같이 두가지 방식으로 언제든지 접근 가능합니다.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    ChkBtn1->Caption="체크1";
    ChkArr[2]->Caption="체크3";
}


대게 첫번째 방법을 많이 쓰는데..
다른 방법도 있다는것을 얘기한것입니다.

그럼..

+ -

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