Delphi中的Sender:TObject對象解析


Delphi中的Sender:TObject對象解析

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

解析:Procedure是過程,TForm是窗體類,加上數字就是某個窗體,像TForm1就是Form1窗體。

Button1是你的按鈕控件的名稱,Button1Click就是按鈕的單擊事件,(Sender:Tobject)就是發送消息到對象,這里默認為本窗體。

Sender的類型是Tobject,是Tobject的派生類。

 

Delphi中Sender對象

1.Sender的定義:

每一個事件處理里面至少都有一個Sender參數。比如:

procedure TForm1.Button1Click(Sender:TObject);

begin

...

end;

Sender的含義就是代表調用TForm1.Button1Click這個過程的控件. 

由於Sender是TObject,所以任何object都可以賦給Sender.當你點擊BUTTON1時,會產生一個Button1Click事件,系統會把Button1傳遞給Button1Click過程作為參數,也就是所說的Sender.

 

2.Sender的用法:

<1>.由於Sender代表了調用所在過程的控件,那么你就可以直接把它拿來當那個控件用,不過如果要用屬性的話,最好寫成(Sender as 控件名).控件屬性:=... 例如:

procedure TForm1.Edit1Click(Sender: TObject);

begin

with Sender as TEdit do

begin

text:=’hello’;

end;

end;

再比如:

Procedure   TForm1.Button1Click(Sender:TObject); 

begin 

      if   Sender   is   TButton   then 

            showmessage((Sender   as   TButton).Caption) 

      else 

            showmessage( '沒有Sender ') 

end; 

如果你這樣調用 

Procedure   TForm1.button2.click(sender:Tobject); 

begin 

      Button1Click(nil); 

end; 

則返回 '沒有Sender ' 

而如果你這樣調用 

Procedure   TForm1.button2.click(sender:Tobject); 

begin 

      Button1Click(sender); 

end;

則顯示:button2 

<2>.如果在兩個事件中處理同樣的事情,那么可以利用Sender來省去重寫同樣的過程。例如:

Procedure TForm1.Button1Click(Sender:TObject);

begin

do same sth.....;

if Sender=Button1 then

do sth....;

if Sender=Button2 then

do other sth....;

end;

procedure TForm1.Button2Click(Sender:TOBJect);

begin

Button1Click(Button2);

end;

 

3.Sender參數的兩個用途

Sender是一個TObject類型的參數,它告訴Delphi哪個控件接收這個事件並調用相應的處理過程。

你可以編寫一個單一的事件處理句柄,通過Sender參數和IF…THEN…語句或者CASE語句配合,來處理多個構件。

發生事件的構件或控件的值已經賦給了Sender參數,該參數的第一個用途用途就在於:可以使用保留字IS來測試Sender,

以便找到調用這個事件處理句柄的構件或控件的類型。

例如,將表單中編輯框和標簽的Click事件的處理句柄都指向表單的xxx過程,編輯框和標簽對Click事件有不同的反應: 

  procedure TForm1 xxx(Sender:TObject); 

  begin 

  if(sender is Tedit) then 

  showmessage(′this is a editbox′); 

  if(sender is Tlabel) then 

  showmessage(′this is a label′); 

  end; 

Sender參數的第二個用途是結合AS操作符進行類型轉換,將若干個派生於某一父類的子類強制轉換成該父類。

例如表單中有一個TEdit類控件和一個TMemo控件,它們實際上都派生於TcustomEdit類,

如果你要為二者的某一事件提供同樣處理,可以將二者事件句柄都指向自定義的過程yyy: 

  Procedure TForm1.yyy(Sender:TObject); 

  begin 

  (sender as TcustomEdit).text:=′This is some demo text′; 

  end; 

在過程中,AS操作符將TEdit類和TMemo類均強制轉換成TcustomEdit類,再對TcustomEdit類的屬性賦值。注意這種轉換必須符合Delphi中類的層次關系。 

  

總而言之,使用Sender參數可以通過單一過程段處理多類控件,真正體現了Delphi面向對象的重用性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM