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

C++빌더 Q&A
C++Builder Programming Q&A
[45789] Re:가령 체크박스를 여러개 선언하여 배열화 하는 방법은?
장성호 [nasilso] 1610 읽음    2006-07-21 21:57
정확히 목적이 무엇인지 궁금합니다.

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를 주는 방법은 있지만
:
:
: 다른 방법이요.

+ -

관련 글 리스트
45788 가령 체크박스를 여러개 선언하여 배열화 하는 방법은? 빈라덴 975 2006/07/21
45790     Re:가령 체크박스를 여러개 선언하여 배열화 하는 방법은? WARSHIP 958 2006/07/21
45789     Re:가령 체크박스를 여러개 선언하여 배열화 하는 방법은? 장성호 1610 2006/07/21
45792         Re:Re:가령 체크박스를 여러개 선언하여 배열화 하는 방법은? 빈라덴 1197 2006/07/22
45793             Re:Re:Re:가령 체크박스를 여러개 선언하여 배열화 하는 방법은? 빈라덴 1061 2006/07/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.