새해복 마니 받으세요~
위 글을 읽다 보면서 몇가지 의문이 있어 질문드립니다.
void __fastcall TForm1::CheckBox1Click(TObject *Sender)
{
ShowMessage("CheckBox1Click");
}
여기서 ,
TObject *Sender; //선언후
CheckBox1Click(Sender); 하면 이벤트 핸들린 할수 있게 되잖아요?
이때 TObject 객체에서 어떤 이벤트가 발생됐는지도 알수 있는건가요?
그러니깐~ TForm1에서 발생되는 이벤트 발생에 대한 내용들이여 ^^
대책없이 코딩이 되니깐...문의 드리는거라 질문의 타당성도 모르겠어요~ ㅎㅎ
//---------------------------------------------------------------------------
장성호 님이 쓰신 글 :
: 음...
:
: 말씀 하신 내용은
: 제가 언제 한번 정리해야지 하고 생각하던 내용인데
: 자료 정리를 못해서 미루다 미루다 아직도 못했네요
:
:
[이벤트 핸들러 호출 시점]
: 이벤트 이름을 볼때 OnClick 등 마무스로 조작할때만 발생할것 같이 이름의 이벤트도 있구
: OnChange같은 경우 경험적으로 그렇게 착각하고 있는 이벤트도 있습니다.
:
: 그런데.. 이벤트에 따라서
: 마우스로 조작이 아닌 Coding에서 조작을 하여도 이벤트핸들러 함수가 호출되는 이벤트가 있습니다.
:
: Control마다 다르고 똑같지가 않아서 정리를 해야 하는데...
: 아직 못하고 있는 것이죠
:
:
[Coding으로 상태 변경시 이벤트핸들러 호출 되는 예]
:
:
: void __fastcall TForm1::CheckBox1Click(TObject *Sender)
: {
: ShowMessage("CheckBox1Click");
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: CheckBox1->Checked=! CheckBox1->Checked;
: }
: //Button1을 클릭할경우 Button1Click함수가 끝나기 전에 CheckBox1Click함수가 호출됨
:
:
: TCheckBox의 OnClick이벤트도 그런 이벤트중에 하나인데요
: 위 코딩과 같이 Button1클릭시에 CheckBox의 Checked상태를 변경해주면
: Button1Click함수가 끝나기 전에 즉 CheckBox->Checked상태를 변경하면서 곧바로
: CheckBox의 OnClick이벤트 핸들러가 있으면 호출됩니다.
:
:
[ TRadioBox의 경우는..]
:
: TRadioBox의 경우도 코딩에서 Checked상태를 변경해도 이벤트가 호출되는 함수중에 하나인데요
: TRadioBox의 경우는
: 1) Checked될때 는 이벤트가 호출되구
: 2) UnChecked될때는 이벤트가 호출되지 않습니다.
:
: 그리고 CallBack함수 조작할때 만약 곧바로 호출이 되지 않았다면..
: Control중에는 마우스 조작할때만 이벤트가 발생하는
:
: * CallBack함수에서 호출되지 않는 이유는 어떤 경우인제 정확히 잘모르겠네요
:
:
[ OnClick이 호출되지 않게 하려면..]
:
: 다음 코드와 같이 이벤트 핸들러 함수를 NULL로 해주면 Checked상태가 Coding에서 변경되더라도
: 이벤트 핸들러가 호출될 일이 없을것입니다.
:
:
: void __fastcall TForm1::Button1Click(TObject *Sender)
: {
: CheckBox1->OnClick=NULL;
: CheckBox1->Checked=! CheckBox1->Checked;
: CheckBox1->OnClick=CheckBox1Click;
: }
: //---------------------------------------------------------------------------
:
:
:
:
[ 코딩으로 상태변경이 이벤트핸들러가 호출되는 다양한 경우]
: 코딩으로 상태변경이 이벤트핸들러가 호출되는 다양한 경우에 대해 한번 정리해야 되는데...
: 아직 정리를 못하고 있네요
:
: 아뭍은 TCheckBox , TRadioBottun말구두 ..
: Coding으로 상태변경하니까 이벤트 핸들러가 호출되지 않을것이라고 착가하고 Coding하는 경우가
: 상당히 많습니다.
:
: 의심나면 반드시 테스트 해보고 코딩해야 할것입니다.
:
:
목록
:
:
:
:
: 컨트롤 명 |
: 제어내용 |
: 직접 Mouse로 제어시 발생 이벤트 |
: 코딩으로 상태변경시 발생 이벤트 |
:
: TComboBox |
: Item의 선택을 변경시 |
: ComboBoxChange |
: 없음 |
:
: TListBox |
: Item의 선택을 변경시 |
: ListBoxClick |
: 없음 |
:
: TCheckBox |
: Checked상태 변경시 |
: CheckBoxClick |
: CheckBoxClick |
:
: TRadioButton |
: Checked상태 변경시 |
: RadioButtonClick |
: RadioButtonClick |
:
: TRadioGroup |
: Radio버턴 선택 변경시 |
: RadioGroupClick |
: RadioGroupClick |
:
: TTreeView |
: Node선택 변경시 |
: TreeViewChange |
: TreeViewChange |
:
: TEdit |
: Text의 내용 변경시 |
: EditChange |
: EditChange |
:
: TMemo |
: Text의 내용 변경시 |
: MemoChange |
: MemoChange |
:
: TListView |
: Item선택 변경 |
: ListViewChange |
: ListViewChange |
:
: TPageControl |
: ActivePageIndex변경시 |
: PageControlChange발생 |
: 없음 |
:
: |
: |
: |
: |
:
: |
: |
: |
: |
:
:
: 그럼..
:
:
:
: 배우는개발자 님이 쓰신 글 :
: : 우선, 새해 복 많이 받으세요!
: : 제가 작업하는 도중 궁금한 것이 생겨 질문을 남깁니다.
: :
: : 예를 하나 들겠습니다. 라디오박스에 보면 'OnClick' 이벤트가 있습니다.
: : 이벤트드리븐 메소드를 만들어두면 라디오박스를 클릭할때마다 호출됩니다.
: :
: : 그런데 제가 임의로 해당 라디오박스의 체크를 바꿔주는 경우가 생겼습니다.
: : Radiobox1->Checked = true
: : 라는 식으로 말이죠.
: : 그럴경우 OnClick 메소드가 그 소스라인에서 호출되는 것을 확인했습니다.
: :
: : 문제는 어떤 때는 호출되고 어떤 대는 호출이 되지 않는다는 것이었습니다.
: : 그럴리가 없는데, 그럴리가 없는데 라며 오랜시간 디버깅하다가 내린 결론은..
: :
: : 콜백함수에서 'Radiobox1->Checked = true'라고 적혀있으면 이벤트드리븐 메소드가 불러지지 않고
: : 폼 함수 내에서 'Radiobox1->Checked = true'라고 적혀있으면 불러진다는 것입니다!!
: :
: : 잘 모르겠는데 고수분들의 조언 부탁드립니다.
: : 진실이 궁금하네요.