|
저도 빌더 공부하는 초보이기 때문에 아는 것 확인하는 차원에서 답변을 드립니다.
<이벤트핸들러>는 이벤트가 발생했을 경우,일례로 버튼을 클릭했을 경우에 버튼클릭이벤트가 발생하면, 그로인해 실행되는 메소드(함수,펑션,프로시듀어)를 말합니다.
이벤트함수(즉,이벤트핸들러)가 받는 인수중에 첫번째가 TObject* Sender입니다. Sender는 이벤트를 발생시킨객체에 대한 포인터입니다. 가령 버튼을 클릭해서 이벤트함수가 실행되면, 함수인자로 넘어오는 TObject* Sender는 버튼을 가리키는 포인터인 셈이죠.
폼에 버튼이 여러개가 있고, 단지 설정값만 바꾸는 식의 비슷한 처리를 한다고 할때에 버튼 각각에 대해 서로다른 이벤트핸들러를 설치하는 것은 코드가 낭비되는 결과를 초래할 겁니다. 이경우에 모든 버튼에 대해 동일한 이벤트핸들러를 설정해주면, 핸들러함수내부에서 switch혹은 if else구문등을 써서 버튼을 구별하고 그에 따른 처리를 시키면 될것입니다.
가령 클릭한 버튼의 캡션을 바꾸고자 한다면,핸들러함수내부에서,
TButton* btn=(TButton*)Sender;
btn->Caption="Clicked";
라는 코드를 실행시키면, 여러개의 버튼중에 마침 클릭했던 버튼의 캡션만 바꾸어지게 될테지요.
여러개의 콘트롤이 같은 이벤트핸들러를 공유할 경우에,콘트롤 속성중의 Tag속성이 유용할 경우가
많습니다. 정수형을 기억할수 있으므로, Tag에 중복되지 않는 정수값을 지정한 후에, 핸들러 내부에서 swich구문을 사용해서 구분할 수 있으니까요.
|