如何在窗体之间通讯的几种方法 ? VB.NET方案
? ? ? 在面向過(guò)程的程序中,我們可以通過(guò)窗體名來(lái)訪問(wèn)其他窗體中控件或者數(shù)據(jù),但是在面向過(guò)程中卻稍有不同,面向過(guò)程顯示了它的優(yōu)點(diǎn)。
? ? ? 假設(shè)一個(gè)Window解決方案中,有兩個(gè)窗體Form1和Form2,Form1窗體中有一個(gè)DataGridView數(shù)據(jù)控件,如何在Form2中訪問(wèn)DataGridView中數(shù)據(jù),即如何實(shí)現(xiàn)在這兩個(gè)窗體之間通訊呢?
? ? ? 第一種方法
? ? ? 通過(guò)設(shè)置Form2窗體的構(gòu)造函數(shù),改為帶參數(shù)的構(gòu)造函數(shù),傳入一個(gè)對(duì)象,在設(shè)計(jì)模式中經(jīng)常會(huì)傳入類或?qū)ο?#xff0c;實(shí)現(xiàn)了對(duì)數(shù)據(jù)元素的封裝,有些人通過(guò)傳入一些具體參數(shù),如字符串、控件等,無(wú)疑這種方式比較局限,擴(kuò)展性很差,如果Form1中再增加新內(nèi)容后,還需要改傳遞參數(shù)。
? ? ??Private mF_Form As Form1
? ? ? 更改Form2的構(gòu)造函數(shù)為有參數(shù)的
? ? ? Public Sub New(ByVal form As Form1)
? ? ? ? ? ?MyBase.New()
? ? ? ? ? ?'該調(diào)用是 Windows 窗體設(shè)計(jì)器所必需的。
? ? ? ? ? ?InitializeComponent()
? ? ? ? ? ?Me.mF_Form = form
? ? ? ??
? ? ? End Sub
? ? ? 現(xiàn)在,就可以把Form1對(duì)象傳入Form2中,這里對(duì)Form1的修改也是真正對(duì)Form1的修改,因此,也需要謹(jǐn)慎操作。
? ? ? 在Form1中用到Form2的地方還需要加上一句話:
? ? ??Dim form1 As New Form2(Me)
這是因?yàn)镕orm2的構(gòu)造函數(shù)已經(jīng)改變,實(shí)例化Form2時(shí)不再調(diào)用默認(rèn)構(gòu)造函數(shù),需要我們指明參數(shù),然后,實(shí)例化。
? ? ? 這里的Me指的就是Form1當(dāng)前的實(shí)例,也就是把當(dāng)前Form1的實(shí)例通過(guò)Form2的構(gòu)造函數(shù)傳遞給Form2類,否則出現(xiàn) ? “錯(cuò)誤對(duì)非共享成員的引用要求對(duì)象引用”
? ? ? ?第二種方法
? ? ? ?如果我們?cè)贔orm2中,這樣聲明:Dim form1 As new Form1?
? ? ? ?我們知道此時(shí)form1是一個(gè)新的form1實(shí)例,不是我們要用的那個(gè),我們只需讓這個(gè)實(shí)例變成我們要用的那個(gè)即可。
? ? ? ? form1.Owner=Me
? ? ? ? 這樣就可以正常通訊了。
? ? ? ? 有很多時(shí)候?yàn)榱税踩?#xff0c;我們還需要改一個(gè)聲明級(jí)別,因?yàn)檫@樣可以對(duì)原創(chuàng)題進(jìn)行更改,很不安全。
? ? ? ? 在C#等語(yǔ)言中,方法類型……
轉(zhuǎn)載于:https://www.cnblogs.com/lilongsheng/archive/2012/05/27/3226110.html
總結(jié)
以上是生活随笔為你收集整理的如何在窗体之间通讯的几种方法 ? VB.NET方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android ImageView图片
- 下一篇: Ubuntu下配置JAVA环境