請問關鍵字「Self」 |
尚未結案
|
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
|
pental
初階會員 發表:3 回覆:48 積分:30 註冊:2003-09-21 發送簡訊給我 |
self 是一個指向物件自己本身的指標,一般來說如果你有一個 frmMain 的 Form ,當你寫一個 Procedure 時,如果你想改變 Caption 的值,你可以寫 frmMain.Caption = '12345' 但你也可以寫 self.Caption = '1234' 一般你看到的 XXX.Create(self) 這是表示 XXX 這個物件建立之後的 Parent 是指向 self ,例如 你在 Form 裡面要動態產生一個 TImage 的物件,那你就必須寫 MyImg := TImage.Create(self) 這裡的 self 是指 Form 本身 不知道這樣的解釋,你是否有所了解!
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: self 是一個指向物件自己本身的指標,一般來說如果你有一個 frmMain 的 Form ,當你寫一個 Procedure 時,如果你想改變 Caption 的值,你可以寫 frmMain.Caption = '12345' 但你也可以寫 self.Caption = '1234' 一般你看到的 XXX.Create(self) 這是表示 XXX 這個物件建立之後的 Owner 是指向 self ,例如 你在 Form 裡面要動態產生一個 TImage 的物件,那你就必須寫 MyImg := TImage.Create(self) 這裡的 self 是指 Form 本身 不知道這樣的解釋,你是否有所了解!純討論, 請別介意, Owner 與 Parent 很容易搞混掉. |
pental
初階會員 發表:3 回覆:48 積分:30 註冊:2003-09-21 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
leo2568
中階會員 發表:54 回覆:124 積分:70 註冊:2003-09-21 發送簡訊給我 |
Self是一個內建的變數,我們若在方法的實作區中使用Self這個識別字,則Self變數會參考到呼叫該方法的這個物件實體。簡單的說,此時的Self變數可視為是該物件的別名。因此不管該方法所屬的物件名稱為何,Self變數都可以參考到這個物件,然後透過它就可以依址操作該方法所屬的物件。
╭╧╮╭╧╮╭╧╮╭╧╮╭╮☆
║聖│║誕│║快│║樂│ ╰☆╮
╘∞╛╘∞╛╘∞╛╘∞╛☆╰☆ .
﹒☆‧☆∴.:☆﹒‧∴ ☆..... 發表人 - leo2568 於 2003/12/17 17:43:07
|
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
引言: 一般你看到的 XXX.Create(self) 這是表示 XXX 這個物件建立之後的 Owner 是指向 self ,例如 你在 Form 裡面要動態產生一個 TImage 的物件,那你就必須寫 MyImg := TImage.Create(self) 這裡的 self 是指 Form 本身 純討論, 請別介意, Owner 與 Parent 很容易搞混掉.感謝回應,另外能否請在多解釋一下, Owner 與 Parent 的差異呢? (看HELP說明、兩者都是MEM控管注意、但實在區分不太出來) |
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
|
s07452
一般會員 發表:20 回覆:16 積分:7 註冊:2003-11-17 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
Owner 掌管的是 instance 的生死, Parent 掌管的是 instance 的顯示, 這樣明白嗎? 所以 Owner 是會影響 instance 何時會去 destruct , 也就是若某一個 instance 的 Owner 將要被 Free 時, 除會 notify 該 instance , 也會 notify 其底下的所有其他的 instance 要 free 了; parent 只會影響該 instance 顯示的狀況, 某一個 instance 的 parent 要重繪了, 會 notify 其底下的所有 instance 要繪製了. 寫個簡單的小例子:
procedure TForm1.Button1Click(Sender: TObject); var b: TButton; begin b := TButton.Create(self); // 若 self(Form1) free 時, 就會被 free 掉 b.Parent := self; // 此行設定完成後, 該 instance 才會顯示出來. ShowMessage('Display on Form'); b.Parent := Panel1; // 此行設定完成後, 就會顯示在 Panel1 上哦!! ShowMessage('Display on Panel'); end;後面的問題, 可以利用 Form 的 ActiveControl 來取得何者是目前被選到的 instance, 如 self.ActiveControl.Name 可以取得該 instance 的 name!! self 在前面幾篇文章寫得很清楚了, 請仔細閱讀, 有不明白的再問! |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! Parent在字典里是父母親的意思, 在Dehphi的世界里, Parent就是直接包含本身物件的容器物件, 我們做個測試, 請您在Form上加一個GroupBox, 一個Panel, 然后分別在Form, Groupbox, Panel上各加一個Button元件, 然后您可發現, 在設計時期, 當您移動Panel1元件時, Panel1元件上的Button元件也會跟著移動, 同樣的, 當您移動GroupBox元件時, GroupBox元件上的Button元件也會跟著移動, 所以說Panel1元件上的Button元件的Parent就是Panel1, 而GroupBox元件上的Button元件就是GroupBox, 而直接加在From上Button元件, 其Parent就是From本身, 因為只有移動Form的時候, 此Button元件才會跟著移動. Owner和Parent比較容易混淆, Owner是指本物件的擁有者, 就上例而言, Form元件的Owner和Parent都是TApplication, 而GroupBox1, Panel1及其加在GroupBox1, Panel1上的Button元件的Owner都屬性TForm1, 同上例請參考如下表例:
物件名稱 Parnet Owner ========================================================== Form1 Application TApplication GroupBox1 Form1 TForm1 Panel1 Form1 TForm1 Button1(在GroupBox11上) GroupBox1 TForm1 Button2(在Panel1上) Panel1 TForm1 Button3(在Form1上) Form1 TForm1 ==========================================================參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
Leway
一般會員 發表:43 回覆:71 積分:22 註冊:2003-07-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |