在面向過程的程式中,我們可以通過表單名來訪問其他表單中控制項或者資料,但是在面向過程中卻稍有不同,面向過程顯示了它的優點。
假設一個Window解決方案中,有兩個表單Form1和Form2,Form1表單中有一個DataGridView資料控制項,如何在Form2中訪問DataGridView中資料,即如何?在這兩個表單之間通訊呢?
第一種方法
通過設定Form2表單的建構函式,改為帶參數的建構函式,傳入一個對象,在設計模式中經常會傳入類或對象,實現了對資料元素的封裝,有些人通過傳入一些具體參數,如字串、控制項等,無疑這種方式比較局限,擴充性很差,如果Form1中再增加新內容後,還需要改傳遞參數。
Private mF_Form As Form1
更改Form2的建構函式為有參數的
Public Sub New(ByVal form As Form1)
MyBase.New()
'該調用是 Windows 表單設計器所必需的。
InitializeComponent()
Me.mF_Form = form
End Sub
現在,就可以把Form1對象傳入Form2中,這裡對Form1的修改也是真正對Form1的修改,因此,也需要謹慎操作。
在Form1中用到Form2的地方還需要加上一句話:
Dim form1 As New Form2(Me)
這是因為Form2的建構函式已經改變,執行個體化Form2時不再調用預設建構函式,需要我們指明參數,然後,執行個體化。
這裡的Me指的就是Form1當前的執行個體,也就是把當前Form1的執行個體通過Form2的建構函式傳遞給Form2類,否則出現 “錯誤對非共用成員的引用要求對象引用”
第二種方法
如果我們在Form2中,這樣聲明:Dim form1 As new Form1
我們知道此時form1是一個新的form1執行個體,不是我們要用的那個,我們只需讓這個執行個體變成我們要用的那個即可。
form1.Owner=Me
這樣就可以正常通訊了。
有很多時候為了安全,我們還需要改一個聲明層級,因為這樣可以對原創題變更,很不安全。
在C#等語言中,方法類型……