詳解VFP編程之三:設計時和運行時
在之二的Hello,World闡述中,前後兩個示例,實際有一點本質區別,那就是開始的拖拉設計屬於“設計時”方法,後面的代碼屬於“運行時”方法。所謂設計時,是靜態的,是指程序還沒有被執行,此時所做的,都是描述性行爲,當程序被Run時,這些設計會以整體的方式一起呈現出來,可以視爲沒有前後次序,都是一次過做好的,你可以理解爲在工厰中閉門把產品造好,然後拿出來讓人看到完整的實物。所謂運行時,則是動態的,它在程序運行時隨著時間進行,你可以看到產品在不斷演變,看到裝配過程。“設計時”和“運行時”的區別,是很重要的。我們看幫助文檔,經常見到某屬性“在設計和運行時可用”(如Form的Caption屬性)及“設計時可用;運行時祇讀”(如Form的ShowWindow屬性)這樣的文字。這裏的意思,是ShowWindow這樣的屬性,必須在對象的類設計中做好,一旦構建實例對象,是不可以改變這種屬性的。看具體例子就知道,窗體的標題文字(Caption),顯然可以隨時任意改變,但窗體的呈現方式,它是頂層表單還是從屬於某個頂層表單的子表單,也很理所當然地不可能讓你隨時變換。從這樣的具體例子,反過來理解概念就對了。設計時和運行時有一個很典型的特徵,前者的控件,天生都是可見的(Visible値爲.T.),除非你設計時明確要Visible=.F.;後者的控件,在Visible=.T.前,都是不可見的。
在Hello,world的第二個例子中,窗體oMainForm是在程序執行時從無到有逐漸構建起來的,先從類(Form)中創建對象實例oMainForm,此時它是原始的Form實體,一切屬性和行爲都是Form設計時規定好的那樣,然後,我們根據實際情況不斷地改造它,如改變標題文字(Caption)、設置尺寸、擺放位置等,並動態地給窗體添加控件,再對那些控件進行設置。這些動作,都在執行時逐漸像動畫那樣形成。這就是動態模式,現實中很多程序,都需要這樣動態形成控件,尤其是那些批量生成的控件,事先根本就不知道有多少個控件要生成,那麽在設計時顯然也拖拉不出來,那祇能是用代碼寫的;更進一步的,有些批量控件是在某些時候出現,然後要消失,再重新生成一批,對付這些需求,也必須用動態代碼。
在第一個例子中,我們拖拉出來的Form1.scx,是一個整體,它天生地就包含了那個Label1控件,這是一個完成了的類實例對象(不是類),在DO FORM的時候,這個對象一氣把Form和其中的Label都呈現出來。而第二個例子,是先生成Form對象,再在裏面添加Label對象,不是僅僅有一個對象。
寫程序的時候,一定要搞清楚這種區別,不然你自己在做什麽、看別人的程序在幹什麽,都會茫然不知其所以然。那麽,如那個Hello,world程序,要採取靜態設計的代碼,該怎樣寫呢?
[此贴子已经被作者于2016-2-4 23:58编辑过]