上面的代碼是Tcomponent類的SetReference方法,這個方法可以被InserComponent,RemoveComponent和SetName等方法調用。
當你理解了這一點後,你應該不難想到如果你將組件參照從published部分移到了private段,你將失去VCL的自動關聯功能。為了解決這個問題,你可以通過在窗體的OnCreate事件中添加如下代碼解決:
Edit1:=FindComponent(‘Edit1’) as Tedit;
你接下來應該做的就是在系統中注冊這些組件類,當你為他們注冊過後就能使RTTI包含在編譯程序中並且能夠被系統所使用。當你將這些類型的組件參照移到private部分時,對於每一個組件類,你只需為他們注冊一次。即使為他們注冊不是一定必要的時候,你也可以這樣做,因為對於RegisterClasses的額外調用有益無害。通常你應該在單元中負責生成窗體的初始化部分添加以下的代碼:
RegisterClass([TEdit]);
規則15:面向對象編程的窗體向導(The OOP Form Wizard)
為每一個窗體的每一個組件重復上述兩個操作不僅十分的煩人,而且相當的浪費時間。為了避免額外的負擔,我已經為此寫了一個簡單的向導程序。這個程序將會生成一些可以完成以上兩步工作的代碼,你需要做的僅僅是做幾次復制和粘貼就行了。
遺憾的是這個向導程序不能自動將代碼放置到單元中合適的地方,我目前正在修改這個向導程序,希望能實現這個功能。你可以到我的網站(www.marcocantu.com)查找更加完善的程序。
規則16:可視化窗體繼承(Visual Form Inheritance)
如果應用得當,這將是一個強大的工具。根據我的經驗,你所開發的項目越大,越能體現它的價值。在一個復雜的程序中,你可以使用窗體的不同等級關系來處理一組相關窗體的多態性(polymorphism)。