기본적인 동적 컨트롤 생성방법은 바로 아래 팁에서 설명했구..
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";
}
대게 첫번째 방법을 많이 쓰는데..
다른 방법도 있다는것을 얘기한것입니다.
그럼..
|