如何在窗体之间通讯的几种方法 ? VB.NET方案
? ? ? 在面向過程的程序中,我們可以通過窗體名來訪問其他窗體中控件或者數據,但是在面向過程中卻稍有不同,面向過程顯示了它的優點。
? ? ? 假設一個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#等語言中,方法類型……
轉載于:https://www.cnblogs.com/lilongsheng/archive/2012/05/27/3226110.html
總結
以上是生活随笔為你收集整理的如何在窗体之间通讯的几种方法 ? VB.NET方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android ImageView图片
- 下一篇: WPF 调用线程无法访问此对象,因为另一