イベント・メソッドの Self は何を指しているのでしょうか?
procedure TMyPtn.Greeting;
begin
if Assigned(FOnGreeting) then
FOnGreeting(Self); //この Self は何のためにあるのか?
end;
ヘルプによるとSelf 識別子はそのメソッドが呼び出されたオブジェクトを参照するということですから、 たとえば次のように使用した場合 Self は MyPtn1 になるのでしょうか?
-------------
MyPtn1 := TMyPtn.Create;
procedure TForm1.MyPtn1OnGreeting(Sender: TObject);
begin
with MyPtn1 do
begin
・・・・・
end;
end;
Selfが指すのは「イベントを呼び出したオブジェクト」ではなくあくまで「メソッドを実行しているオブジェクト」です。
その例だとTForm1のメソッドの中なので、Selfが指すのはTForm1のインスタンスになります。
> FOnGreeting(Self); //この Self は何のためにあるのか?
TMyPtnのメソッド内なので、そのSelfはTMyPtnのインスタンス(MyPtn1とか)を指します。
これが下のイベントハンドラの引数で渡されますから、Sender = MyPtn1 となります。
つまり相手の方でSenderを見れば「イベントを呼び出したオブジェクト」がどれか特定できる。これが目的です。
ツイート | ![]() |