不同視窗之間的變數或函數調用
使用視窗名加界定符再加變數的形式可以應用其他視窗中的變數或者函數。例如,要想在視窗w_parm中引用視窗w_data中的執行個體變數is_title,可以使用w_data.is_title來引用。引用變數既可以使用其他的取值,也可以給它賦值,只要變數的定義允許這些操作(具體參見前面有關章節的介紹)。
實際上,這在程式設計中並不提倡。模組之間互相連接的程度稱為耦合,程式設計提倡建立低耦合的模組,這樣模組之間的介面才會簡單,這樣的程式才易於維護。不同視窗之間直接引用變數是最高程度的耦合(稱為內容耦合),是應該盡量避免的一種耦合。
在不同視窗之間訪問視窗函數也使用相同的形式,同樣也是不提倡的。
雖然不提倡,但某些情況下編程還是很方便的。比如,在資料視窗進行資料檢索時,提供給使用者一個小視窗顯示檢索進度,並允許使用者隨時取消檢索。假設當視窗w_data中的資料視窗dw_1進行檢索時彈出小視窗w_cancel,其編程過程是:
(1)在視窗w_data中定義執行個體變數:
boolean ib_cancel_open
(2)在視窗w_data的Open事件中:
dw_1.SetTransObject(SQLCA)
(3)在視窗w_data的資料視窗控制項dw_1的RetrieveStart事件中:
ib_cancet_open = true //表示視窗w_cancel已經開啟
Open(w_cancel)
(4)在視窗w_data的資料視窗控制項dw_1的RetrieveRow事件中:
This.ScrollNextRow( ) //滾動到新檢索的資料行上
If IsValid(w_cancel) Then //如果w_cancel沒有關閉
//在w_cancel視窗中的st_count靜態文本控制項上顯示已經檢索到的記錄數
w_cancel.st_count.Text = String(This.RowCount( ))
End If
If ib_cancel_open = False Then Return 1 //停止檢索
(5)在視窗w_data的資料視窗控制項dw_1的RetrieveEnd事件中:
If ib_cancel_open Then
ib_cancel_open = False
End If
Close(w_cancel)
(6)在視窗w_cancel的按鈕“取消”的Clicked事件中:
Parent.ParentWindow( ).TriggerEvent("cancel_requested")
(7)在視窗w_data的自訂事件cancel_requested中:
ib_cancel_open = false
在上面這個程式中,當視窗w_data中的資料視窗開始檢索時,小視窗w_cancel顯示並不斷重新整理檢索到的記錄數,在w_cancel中使用者隨時可以點擊“取消”按鈕終止檢索。該程式中,在w_data的資料視窗dw_1的retrieverow事件中直接修改視窗w_cancel中的st_count控制項的內容,所以這兩個視窗屬於內容耦合。