Self是意指本实例类
如在
type
TForm1=class(tform)
published
procedure buttononcick(Sender: TObject);
...
end;
var Form1:TForm1;
那在以“TForm1.”中用到的过程和函数中,Self意指以TForm1生成的实例,如(Form1)
所以在Delphi中并不是Self一定指窗体的,它可以由不同的类有不同的对象。
如在VCL中TEdit类中某个过程:
procedure TEdit.DoSomeThing;
begin
Self....//那这Self就是指TEdit生出来的实例对象。
end;
而Sender 嘛,就是一个TObject对象。因为所以的控件,还有类是从它生出来的,所以所大部分用Self作实参的调用的过程或函数,它的形参都是(Sender:TObject),像我们在各事件中,如果
有多个事件是共同的,就可以通过强制转换所要的类型,来达来效果。
procedure TEdit.DoExit;
begin
if Assigned(FOnExit) then FOnExit(Self);
end;
procedure TForm1.Edit1OnExit(Sender :TObject);//这个Sender 其实就是上面Self传过来的.
begin
ShowMessage((Sender as TEdit).Name);//name='Edit1'
end;