全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1233
推到 Plurk!
推到 Facebook!

請問關鍵字「Self」

尚未結案
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-15 23:10:30 IP:61.56.xxx.xxx 未訂閱
1. 越來越常看到,但HELP實在看不懂~ 請前輩解釋一下其意義吧?感謝~ 2. 最常見的就是 xxxx.Create(Self); 請問是? 3. xxxx.Create(Self); xxxx.Create; 這兩者相同嗎?
pental
初階會員


發表:3
回覆:48
積分:30
註冊:2003-09-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-16 15:12:29 IP:211.21.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-16 21:10:52 IP:218.32.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-16 23:16:06 IP:61.30.xxx.xxx 未訂閱
謝謝大大的指正!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-16 23:37:16 IP:63.84.xxx.xxx 未訂閱
您好!    形容得簡單一些, Self就是指您撰寫程式碼所屬的類別. 比如說在Form1的OnCreate事件中:
begin
  Self.Color := clYellow;
end;
//此處的Self就是指Form1 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
leo2568
中階會員


發表:54
回覆:124
積分:70
註冊:2003-09-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-17 17:33:41 IP:61.217.xxx.xxx 未訂閱
Self是一個內建的變數,我們若在方法的實作區中使用Self這個識別字,則Self變數會參考到呼叫該方法的這個物件實體。簡單的說,此時的Self變數可視為是該物件的別名。因此不管該方法所屬的物件名稱為何,Self變數都可以參考到這個物件,然後透過它就可以依址操作該方法所屬的物件。 ╭╧╮╭╧╮╭╧╮╭╧╮╭╮│║│║│║ ╘∞╛╘∞╛╘∞╛╘∞╛ . ﹒﹒‧∴ ☆..... 發表人 - leo2568 於 2003/12/17 17:43:07
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-18 19:47:21 IP:61.56.xxx.xxx 未訂閱
引言: 一般你看到的 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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-18 20:01:34 IP:61.56.xxx.xxx 未訂閱
也就是說像這樣:(←表示繼承) TObject←A←B←C←D←E 此時若Create一個instance以E: EE:= E.create; 假設在EE中又create一個Button: btn:= TButton.Create(Self); 另外若Create一個instance以C, 同時作一個LABEL: CC:= C.create; lb:= TLabel.Create(Self); 這時候的 owner 與 parent 會是?
s07452
一般會員


發表:20
回覆:16
積分:7
註冊:2003-11-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-18 20:08:17 IP:61.56.xxx.xxx 未訂閱
最後在請問一下: 如果FORM上有很多instance、想判斷何者被選到? AObj.StopObject:= Self; 這邊SELF的意思又是代表?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-18 23:37:42 IP:61.62.xxx.xxx 未訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-19 02:34:07 IP:63.84.xxx.xxx 未訂閱
您好!    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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-27 11:39:37 IP:218.80.xxx.xxx 未訂閱
delphi中的self和C 的this很像 ========================= 語言是工具,最重要是如何解決問題。
系統時間:2024-11-05 5:20:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!