Owner 與Parent 的區別

來源:互聯網
上載者:User

        很多時候會將一個Panel1放在Form1上,然後再將一個Button1放在Panel1上,這樣的話,這個Button1的Owner就是Form1而Parent則是Panel1。

        所有的Delphi的Component都有Owner 屬性,Owner屬性工作表示這個Component的所有者是誰,比如上面的例子,Button1的所有者(Owner )就是Form1,當Form1析構時,會先將Button1釋放掉。也就是說,Owner會自動地控制Component的生命週期,它負責構件的建立和釋放。如在上例中,系統預設Form上所有Component的所有者是Form1。順便指出,Create方法應帶有表示Component的Owner的參數.,如果Owner設定的為Nil值,那這個Component必須建立者編碼析構它,Owner屬性是唯讀,並且在運行期是無法修改它的值。

         類似,但不同於Owner屬性,Parent 屬性則表示Component從屬於另一個Component,簡單的說自身是其他Component的Child Component,例如 TForm,TGroupBox ,TPanel等。Parent是用來控制 在它的客戶區範圍內的Child Component,Parent決定如何展示包含的Child Component,例如:Left,Top等屬性都是相對於Parent的位置。

         Parent屬性可以在運行期被修改。並非所有的Component都有Parent,Parent屬性可以為Nil值,可以用HasParent 方法返回的Boolean值來判斷Component是否擁有Parent。 我們可以設定Parent屬性來做一些控制,例如:我們可以在Form1上置Panel1和Panel2,然後再放一個Button1在Panel1上,在Button1的OnClick事件中寫上:Button1.Parent := Panel2;  運行這段代碼你會發現,開始Button1是在Panel1上,然後按下Button1觸發OnClick事件後,Button1‘跳’到了Panel2上。我們要在運行期間建立一個Button的話,就一定要注意指定它的Parent屬性,否則Button不會顯示出來,因為它必須擁有一個Parent的容器來顯示自己。如果你在設計這個Button時察看下屬性編輯器,你會看到ParentFont和ParentShowHint等屬性,類似於這樣的屬性設定為True的話,就會使Button的Font以及ShowHint屬性按Parent的Font和ShowHint的值來設定,保持一致的風格。比如Parent的Font是紅色,那麼Button的字型也將是紅色。

        ControlCount和ComponentCount的區別也就取決於Parent與Owner的區別,還是拿上面的例子解釋下Panel1的ControlCount為1而ComponentCount卻為0,是因為Button1的Parent屬性指向的是Panel1而Owner屬性則還是Form1,所以Form1的ComponentCount值才是1。我們可以利用Controls屬性與Components屬性去遍曆Parent所包含的Child Component和Owner所管理的Child Component。

        這是一個初學者比較容易混淆的概念,希望此文能協助剛剛接觸Delphi的朋友瞭解些基本的知識。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.