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
[67725] Re:Re:Re:체크 박스를 동적생성 했습니다.하지만 문제가 있어 질문을 드립니다.~
장성호 [nasilso] 3320 읽음    2012-07-12 17:41
네.

TCheckBox의 Checked 속성은

실제로 마우크로 클릭하여 Checked를 변경하지 않고
코딩으로Checked 상태를 변경하여도 OnClick 이벤트가 발생합니다.

코딩으로 상태변경했는데..
마우스로 사용자가 조작한것과 같은 Name의 이벤트가 발생하는 컴포넌트가 여러가지 있습니다.

다음 링크를 참조하세요
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=947


방법은 딱히 없구요
그렇지 않는 컴포넌트를 쓰던지..

Checked를 변경할때 Event 연결을 해제 한후에, Checked 상태 변경후 다시 이벤트 연결하는 방법이 있습니다.

void __fastcall ChangeChecked(TCheckBox *ChkBox , bool bChecked)
{
     TNotifyEvent ChkOnClick;
     ChkOnClick  = ChkBox->OnClick;
     ChkBox->OnClick = NULL;   //이벤트 핸들러 연결 해제 

     ChkBox->Checked = bChecked; // 속성 변경 

     ChkBox->OnClick = ChkOnClick;  //다시 이벤트 연결
     
}



그럼..


쌩조 님이 쓰신 글 :
: 감사드립니다~
: 그렇죠 ㅎ 함수를 갯수만큼 만들면 의미가 반감되죠 ㅜㅜ
: 근데 CheckBox 이벤트가 OnClick 이벤트라서인지 기존의 CheckBo가 true에서 false 되면서도 이벤트가 발생하는것 같습니다.
: 그래서 인지 Checked일때만 이벤트가 발생되고 싶게 만든 저의 의도가 잘 맞지 않아서 라디오 버튼으로 만들기는 했는데.
: 혹 이부분은 어떻게 해야 될까요?
: 장성호 님이 쓰신 글 :
: : 함수를 동적생성Control 갯수만큼 만든다면 ..
: : 동적생성의 의미가 반감될듯 하네요
: :
: : OnClick이벤트이면
: :
: : TObject *Sender 라는 파라메터가 있습니다.
: :
: : 이 Sender가 실제로 Click한 TCheckBox 입니다.
: :
: : Sender를 이용해서
: : 어떤 Control에서 이벤트가 발생한것인지 알수 있습니다.
: :
: : ================================================
: :
: : Design-time에 Form위에 올려진 Control이면
: : Name이 모두 다른데..
: :
: : 동적 생성인 경우엔 Name으로 체크하기는 힘들고..
: :
: : 보통 .. Tag값을 동적생성하면서 다르게 주고..
: : 이벤트에서 Sender를 cast해서 Tag값을 체크해서 처리하기도 합니다.
: :
: : //동적생성..
: :
: : ChkBoxArr2[i] ->Tag = i ;
: : 

: :
: :
: : //이벤트에서..
: :
: : void __fastcall TForm1::ChkRowExcute2( TObject *Sender )
: : {
: :     TCheckBox *ChkBo= ( TCheckBox * ) Sender;
: :     ChkBox->Tag ; // 동적생성에 설정한 i 값이 됨
: : 
: : }
: : 

: :
: : 그럼 ..
: :
: :
: : 쌩조 님이 쓰신 글 :
: : : 질문 내용이 제목이랑 맞는지 잘 모르겠지만 .
: : : for (int i = 0; i <= 1000; i++) {
: : :     ChkBoxArr2[i] = new TCheckBox(this);
: : :     ChkBoxArr2[i]->Caption = "CycleRow" + IntToStr(i);
: : :     ChkBoxArr2[i]->Left = 16;
: : :     ChkBoxArr2[i]->Top = (i*16);
: : :     ChkBoxArr2[i] ->Width = 90;
: : :     ChkBoxArr2[i] ->Parent = ScrollBox2;
: : :     ChkBoxArr2[i] ->OnClick = ChkRowExcute2;
: : : }
: : : 이렇게 체크 박스를 동적 생성하여 만들었습니다.
: : :
: : : 체크박스가 1~10까지 생성하면
: : : 이벤트가 버튼 1을 클릭하든 2를 클릭하든 같은 이벤트를 발생하게 됩니다.
: : :
: : : 버튼1은 a
: : : 버튼2는 b
: : : 버튼3은 c
: : : 이런식으로 나누고 싶은데 어떤 방법이 있을까요?

+ -

관련 글 리스트
67694 체크 박스를 동적생성 했습니다.하지만 문제가 있어 질문을 드립니다.~ 쌩조 1657 2012/07/09
67695     Re:체크 박스를 동적생성 했습니다.하지만 문제가 있어 질문을 드립니다.~ 장성호 1721 2012/07/10
67724         Re:Re:체크 박스를 동적생성 했습니다.하지만 문제가 있어 질문을 드립니다.~ 쌩조 1895 2012/07/12
67725             Re:Re:Re:체크 박스를 동적생성 했습니다.하지만 문제가 있어 질문을 드립니다.~ 장성호 3320 2012/07/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.