Q&A

  • Sender를 이용한 이벤트 핸들러 연결에 대해서 질문이요..
unit Unit1;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;



var

Form1: TForm1;



implementation



{$R *.DFM}



procedure TForm1.Button1Click(Sender: TObject);

begin

if (Sender as TButton).Caption = 'Button1' then

ShowMessage(' Button1 Click');

if (Sender as TButton).Caption = 'Button2' then

ShowMessage(' Button21 Click');

if (Sender as TButton).Caption = 'Button3' then

ShowMessage(' Button31 Click');

if (Sender as TButton).Caption = 'Button4' then

ShowMessage(' Button41 Click');

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

//ShowMessage(' Button2 Click');



end;



procedure TForm1.Button3Click(Sender: TObject);

begin

//ShowMessage(' Button3 Click');



end;



procedure TForm1.Button4Click(Sender: TObject);

begin

//ShowMessage(' Button4 Click');



end;



end.



위는 간단하게 제가 테스트용으로 한것입니다.

각 버튼을 누르면은 해당버튼의 번호가 눌렸다는 메세지창을 뜨게 한 것입니다.



한데 전 이것을요 버튼1에서 다 제어하고 싶은 것입니다.

그래서 버튼1의 이벤트 핸들러안에다가 나머지 버튼들을 연결시켜서요,

if문으로 해당 버튼의 sender가 왔을때 버튼의 이름을 확인하고 해당 메세지창을

띄우려는 것입니다. 근데 위와같이 하면은 버튼1만 작동하고 나머지는 아무소식이

없더군요..... 고수님들의 도움 기다릴께요.....

1  COMMENTS
  • Profile
    kylix 2001.04.14 20:33
    나머지 세개의 이벤트(Button2Click, Button3Click, Button4Click)는 필요 없으니까 지우시고요... Button2, Button3, Button4의 OnClick이벤트를 Button1Click으로 설정하세요.



    참고로 님의 코드의 경우 아래와 같이 간단하게 하실수 있습니다. 그리고 님의 경우처럼

    Sender객체의 형을 확실히 알 수 있는 경우는 As연산자보다는 아래처럼 직접 형변환해서

    사용하시는 것이 좋습니다.



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    ShowMessage(' ' + TButton(Sender).Caption + ' Click');

    end;



    최은규 wrote:

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > Button2: TButton;

    > Button3: TButton;

    > Button4: TButton;

    > procedure Button1Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure Button3Click(Sender: TObject);

    > procedure Button4Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    >

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if (Sender as TButton).Caption = 'Button1' then

    > ShowMessage(' Button1 Click');

    > if (Sender as TButton).Caption = 'Button2' then

    > ShowMessage(' Button21 Click');

    > if (Sender as TButton).Caption = 'Button3' then

    > ShowMessage(' Button31 Click');

    > if (Sender as TButton).Caption = 'Button4' then

    > ShowMessage(' Button41 Click');

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > //ShowMessage(' Button2 Click');

    >

    > end;

    >

    > procedure TForm1.Button3Click(Sender: TObject);

    > begin

    > //ShowMessage(' Button3 Click');

    >

    > end;

    >

    > procedure TForm1.Button4Click(Sender: TObject);

    > begin

    > //ShowMessage(' Button4 Click');

    >

    > end;

    >

    > end.

    >

    > 위는 간단하게 제가 테스트용으로 한것입니다.

    > 각 버튼을 누르면은 해당버튼의 번호가 눌렸다는 메세지창을 뜨게 한 것입니다.

    >

    > 한데 전 이것을요 버튼1에서 다 제어하고 싶은 것입니다.

    > 그래서 버튼1의 이벤트 핸들러안에다가 나머지 버튼들을 연결시켜서요,

    > if문으로 해당 버튼의 sender가 왔을때 버튼의 이름을 확인하고 해당 메세지창을

    > 띄우려는 것입니다. 근데 위와같이 하면은 버튼1만 작동하고 나머지는 아무소식이

    > 없더군요..... 고수님들의 도움 기다릴께요.....