|
정확히 목적이 무엇인지 궁금합니다.
VB에서는 Design타임대 Control을 배열로 선언할수 있지만
BCB에서는 안됩니다.
가령 TCheckBox 가 CheckBox1 ~~ CheckBox64 까지 64개 폼에 올려 놓았다고 가정합시다
[방법1]
전력으로 TCheckBox * 형 변수를 선언합니다
TCheckBox *ChkBox[64];
void __fastcall TForm1::FormCreate(TObject *Sender)
{
String sChkName;
for(int i=0;i<64;i++) //프로그램이 시작될때 Component를 찾아 모두 배열에 넣어줍니다.
{ //문론 Memory가 64 * 4 Byte 더 쓰게 되죠
sChkName="CheckBox"+IntToStr(i+1);
ChkBox[i]=this->FindComponent(sChkName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender) //원하시는대로 Timer에서 체크할수 있습니다.
{
for(int i=0;i<64;i++)
{
if(ChkBox[i])
{
if(ChkBox[i]->Checked)ShowMessage("체크됨");
}
}
}
//---------------------------------------------------------------------------
[방법2]
CheckBox를 Design타임때 만들지 말고
Coding으로 만들면 됩니다.
전역으로 배열 선언해 놓구
TCheckBox *ckbox[64]
프로그램이 시작될때 전부다 만들어 줍니다. 문론 Click할때 동작할 함수도 걸구요
void __fastcall TForm1::FormCreate(TObject *Sender)
{
for(int i=0;i<64;i++)
{
ckbox[i]=new TCheckBox(this);
ckbox[i]->Parent=Panel1;
ckbox[i]->Left=10;
ckbox[i]->Top=10;
ckbox[i]->Width=50;
ckbox[i]->Caption="CheckBox"+IntToStr(i+1);
ckbox[i]->OnClick=CheckBox1Click;
}
}
코딩으로정확한 위치와 좌표 색상등을 모두 정확하게 해주기는 쉽지 않겠죠?
[방법3]
만약 CheckBox가 50개 100개라 해서 CheckBox의 OnClick이벤트는 모두 하나의 함수에 걸어줄수 있습니다.
ObjectInspecter에서 모든 CheckBox의 OnClick함수를 같은함수로 걸어주면 됩니다.
문론 Coding으로도 가능하구요
CheckBox2->OnClick=CheckBox1Click; //이런식으로 걸어줘도 되구요
여러개의 CheckBox가 하나의 함수로 뛸때 구분방법이 필요하겠죠
저는 구분을 주로 Tag로 합니다.
그러기 위해선 CheckBox마다 Tag값을 다르게 설정해 줘야 겠죠
뭐 다른 방법도 있습니다.
이름이나 찾거나 Caption으로 구분하거나 등등
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
if(Sender)
{
TCheckBox *ckBox=(TCheckBox *)Sender;
if(ckBox->Checked)ShowMessage(IntToStr(ckBox->Tag)+"번 CheckBox가 되었습니다.");
}
}
//---------------------------------------------------------------------------
@목적이 CheckBox체크설정을 변경하기위해서 함수를 여러개 만들어야 된다고 생각하신다면...
문론 하나의 함수로 가능합니다.
[방법1]
void __fastcall TForm1::CheckBoxChecked(String sChkName , bool bCheck)
{
TCheckBox *ckBox=this->FindComponent(sChkName);
if(ckBox)ckBox->Checked=bCheck;
}
//---------------------------------------------------------------------------
[방법2]
//CheckBox의 Tag값을 모두 다르게 줬다면
폼에 있는 ComponentCount 와 Components 를 이용해서
CheckBox만 모두 검색하여 Tag값이 같은것을 찾으면 됩니다.
....................
제가 해드린 답변중에 해답이 있었으면 좋겠네요
그럼
빈라덴 님이 쓰신 글 :
: 가령 체크박스를 여러개 선언하여 배열화 하는 방법은?
:
: 좀 알려주세요.
:
:
: 64체크박스가 어디에 선택되었는지를
: 타이머에서 체크할려고 하고 싶은데....
:
: 체크박스를 배열화 하여 하는 방법은 없나요ㅕ?
:
: 물론 하나 하나 전부 함수를 선언하여 true나 false를 주는 방법은 있지만
:
:
: 다른 방법이요.
|