試著剖析一下TForm1.PageControl1Change(Sender: TObject):
先看看OnChange是什麽?它是一個改變事件(Event)。事件是一種特殊的屬性。那既然OnChange是屬性,它肯定屬於某種特殊的資料類型,這個資料類型又是什麽呢?按下F1在Delphi的Help中找到它:
property OnChange: TNotifyEvent;
也就是說,OnChange是TNotifyEvent類型的資料。再看看TNotifyEvent,發現這樣的一種類型:
type TNotifyEvent = procedure (Sender: TObject) of object
看起來好奇怪嘛,因爲TNotifyEvent後面加了一個of object關鍵字,而of object的作用在於變數只能通過物件來引用。所以現在可以準確的講:TNotifyEvent是一個方法類型
再看看(Sender: TObject),其中的Sender是一個TObject類型的參數,它告訴Delphi哪個元件接收這個事件並調用相應的處理過程。我們可以編寫一個單一的事件處理控制碼(Handle),通過Sender參數和If…then…語句或者Case語句配合來處理多個元件。發生事件的元件的值已經賦給了Sender參數,該參數的用途之一就在於:可以使用保留字Is來測試Sender,以便找到調用這個事件處理控制碼的元件的類型,例如:
procedure TForm1.xxx(Sender:TObject); begin if(sender if Tedit) then showmessage('This is a Editbox'); if(sender is Tlabel) then showmessage('This is a Label'); end;
而Sender參數的第二個用途是:結合As操作符進行類型轉換,將若干個派生于某一父類的子類強制轉換成該父類,例如:一個Form中有一個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中類的層次關係哦!
通過上面的分析,不難理解william和T.J.B兩位前輩Form1.PageControl1Change(Form1.PageControl1)的方法了
小弟也是初通皮毛,謬誤肯定是有的,肯請各位指正,謝謝