|
Click이벤트 함수에서 Sender를 참조해야 하는 경우에 필요합니다.
어떤경우에 그러냐구요?
아래와 같이 Button1~Button4번까지 모두 같은 Button1Click 함수에서 이벤트가 발생할때
어떤버튼을 클릭했는지 어떻게 알수 있을까요?
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Button1->OnClick=Button1Click; //
Button2->OnClick=Button1Click; //ObjectInspecter에서 설정할수도 있고
Button3->OnClick=Button1Click; //코딩으로 처리할수도 있음
Button4->OnClick=Button1Click;
//------------
Button1->Tag=1; //Sender를 받아서 Tag값으로 구분하고자 할때...
Button2->Tag=2;
Button3->Tag=3;
Button4->Tag=4;
//------------
Button1->Caption="버튼1";
Button2->Caption="버튼2";
Button3->Caption="버튼3";
Button4->Caption="버튼4";
//------------
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(Sender==NULL)return;
TButton *Btn=(TButton *)Sender;
ShowMessage(Btn->Caption);
switch(Btn->Tag)
{
case 1:
Btn->Caption="Btn 1"; //이렇게 조작 가능하겠죠...
ShowMessage("버튼1번 클릭했습니다.");
break;
case 2:
ShowMessage("버튼2번 클릭했습니다.");
break;
case 3:
ShowMessage("버튼3번 클릭했습니다.");
break;
case 4:
ShowMessage("버튼4번 클릭했습니다.");
break;
default:
ShowMessage("엉뚱한 버튼을 클릭했습니다.");
break;
}
}
//---------------------------------------------------------------------------
Button이 100개정도 있는데 모든버튼이 똑같은 기능을하는데
어떤 해당 클릭한 버튼을 알아서 무엇인가 해야한다면
예를 들어 클릭한 버튼의 글자 색갈을 바꿔줘야한다면
저 Sender를 이용하면 됩니다.
if(Sender==NULL)return;
TButton *Btn=(TButton *)Sender;
Btn->Font->Color=clRed;
이런식으로 코딩하면 클릭한 버튼의 글자만 빨간색으로 바뀌겠죠
함수 100개 만들필요없고 하나만 있으면 되구....
그리고 Button을 그룹지을수도 있겠죠
1~25번까지 Tag를 1로 주고
26~50번까지는 Tag를 2로 주는 식으로...
.....
//============================================================================
Button의 Click이벤트에서는 Sender가 Button이 옵니다.
다른 VCL Control의 이벤트에서 해당 객체나 아니면 Item으로 추가된 객체들이 인자로 넘어오는 경우가 있습니다.
예를 들어 TreeView의 경우 TreeView1Change 이벤트에서
void __fastcall TForm1::TreeView1Change(TObject *Sender, TTreeNode *Node)
{
//
}
//---------------------------------------------------------------------------
Sender는 TreeView1이구
Node는 TreeView1에버 변경된 TTreeNode *입니다.
이는 TreeView1->Selected 이기도 하죠
이런 인자를 이용해서 여러가지 처리가 가능합니다.
빈라덴 님이 쓰신 글 :
: 장성호님! 그렇다면 버튼함수에서 sender의 역할은 무엇입니까.
:
: NULL과 Sender의 차이를 잘 모르겠어요.
:
: 좀 자세히 부탁드립니다.
:
: 장성호님 고맙습니다.!
|