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
[45851] Re:장성호님! 그렇다면 버튼함수에서 sender의 역할은 무엇입니까.
장성호 [nasilso] 1144 읽음    2006-07-26 14:42
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의 차이를 잘 모르겠어요.
:
: 좀 자세히 부탁드립니다.
:
: 장성호님 고맙습니다.!

+ -

관련 글 리스트
45850 장성호님! 그렇다면 버튼함수에서 sender의 역할은 무엇입니까. 빈라덴 858 2006/07/26
45851     Re:장성호님! 그렇다면 버튼함수에서 sender의 역할은 무엇입니까. 장성호 1144 2006/07/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.