|
두분 감사합니다.
장성호 님이 쓰신 글 :
: 정확히 목적이 무엇인지 궁금합니다.
:
: 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를 주는 방법은 있지만
: :
: :
: : 다른 방법이요.
|