小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

兩個(gè)窗體之間通訊的方法

 nxhujiee 2010-04-15
兩個(gè)窗體之間通訊的方法
作者:Larry Nung    來源:Level Up     更新時(shí)間:2009-11-16

常會(huì)看到有人詢問兩個(gè)表單間的資料要如何互通,重覆詢問率之高讓該問題約可列入初學(xué)者必問的前幾大問題了,光在程式設(shè)計(jì)俱樂部大概這類問題我大概就已回答過4~5次了。最近又在批踢踢討論版中看到有人詢問,索性想說乾脆就整理一篇以後直接貼連結(jié)好了。

基本上要讓兩個(gè)表單間的資料達(dá)到互通大概有下列兩種方法:

方法一 使用Public欄位、屬性、或方法互通表單資料

 image

如上圖所示,假設(shè)今天我們有兩個(gè)表單Form1跟Form2,且Form2由Form1所叫起,在這樣的條件之下,若Form1想要取得Form2上面的資料,相信應(yīng)該對(duì)大家來說都不是問題,直接在Form1上使用Form2的Public欄位、屬性、或方法就可以了。如下程式所示,透過這些Public的成員,我們很容易的可以把Form1的資料送給Form2,也很容易的可以由Form1把Form2上的資料取回。

舉個(gè)例子來說,假如Form2內(nèi)的資料存取範(fàn)圍為Public或是Friend(控制項(xiàng)的話則如下圖把Modifiers屬性值設(shè)為Public或是Friend)。

 image

image

則我們可以在Form1中透過Form2的物件參考直接去控制Form2的控制項(xiàng)或是內(nèi)部的資料。

VB.NET

'透過Form2的Public成員把Form1的資料送給Form2
Form2.NumericUpDown1.Value = Me.NumericUpDown1.Value

C#

//透過Form2的Public成員把Form1的資料送給Form2
Form2.NumericUpDown1.Value = this.NumericUpDown1.Value;

 

很簡(jiǎn)單吧?不過這並不是很好的寫法,因?yàn)榇朔N寫法違反了物件導(dǎo)向的封裝原則。較好的寫法是利用屬性去封裝,首先我們需要把Form2的資料存取範(fàn)圍設(shè)為Private(控制項(xiàng)的話則如下圖把Modifiers屬性值設(shè)為Private),讓類別外無法直接做存取的動(dòng)作。

image

接著,我們可以撰寫如下的Code,利用屬性封裝Form2的控制項(xiàng)甚至是內(nèi)部的資料。

VB.NET

    Property Value() As Decimal
        Get
            Return NumericUpDown1.Value
        End Get
        Set(ByVal value As Decimal)
            NumericUpDown1.Value = value
        End Set
    End Property

C#

public decimal Value {
    get { return NumericUpDown1.Value; }
    set { NumericUpDown1.Value = value; }
}

 

用屬性封裝好後我們就可以在Form1中透過Form2的物件參考,藉由Form2的Public屬性控制Form2的控制項(xiàng)或內(nèi)部的資料。

VB.NET

Form2.Value = 123
 

 

C#

Form2.Value = 123;

 

介紹完Form1如何取得Form2上面的資料後,反過來要是Form2想要主動(dòng)取得或設(shè)定Form1的資料呢?其實(shí)也很簡(jiǎn)單,如下程式所示,只要把上面的概念活用,在Form2被Form1叫起後透過建構(gòu)子或Public屬性把Form1的物件參考傳到Form2內(nèi),F(xiàn)orm2就可以用Form1傳進(jìn)來的物件參考對(duì)Form1內(nèi)的Public成員做想要的動(dòng)作。

VB.NET

Public Class Form1  
...
      'Form1透過Form2的Public成員把自身的物件參考傳入Form2
      Form2.MainForm = Me
...
End Class

Public Class Form2
...
      Public MainForm As Form1
...
      'Form2透過Form1傳進(jìn)的物件參考控制Form1
      MainForm.Value = Me.NumericUpDown1.Value
...
End Class

 

C#

Public Class Form1
{ 
...
      //Form1透過Form2的Public成員把自身的物件參考傳入Form2
      Form2.MainForm = this;
...
}
 
Public Class Form2
{
...
      Public Form1 MainForm;
...
      //'Form2透過Form1傳進(jìn)的物件參考控制Form1
      MainForm.Value = this.NumericUpDown1.Value;
...
}

 

 

值得注意的是,上述方法我是為了示範(fàn)較簡(jiǎn)單的方式才會(huì)把Form1的物件參考傳入Form2,實(shí)際使用上,能避免這樣寫還是建議盡量避免,因?yàn)檫@樣會(huì)讓Form1跟Form2的耦合性提高,較好的方法是Form2內(nèi)定義一些對(duì)應(yīng)的事件,F(xiàn)orm1在這些事件觸發(fā)時(shí)再利用Form2的物件做對(duì)應(yīng)的處理。

程式大概如下:

Public Class Form1
...
       AddHandler Form2.SetValueToForm1, AddressOf OnSetValueToForm1
...
   Private Sub OnSetValueToForm1(ByVal sender As Object, ByVal e As EventArgs)
        Me.NumericUpDown1.Value = Form2.Value        '把Form2的資料送給Form1
    End Sub
...
End Class  '更多.net源碼和教程,來自[樂博網(wǎng) www.]
 
Public Class Form2
...
   Event SetValueToForm1 As EventHandler
 
    Protected Sub OnSetValueToForm1(ByVal e As EventArgs)
        RaiseEvent SetValueToForm1(Me, e)
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        OnSetValueToForm1(New EventArgs)       
    End Sub
...
End Class
 

P.S.這邊初學(xué)者很容易犯的問題就是會(huì)在Form2內(nèi)再宣告出一個(gè)Form1,並對(duì)宣告出的Form1做資料互傳,最後的結(jié)果當(dāng)然是資料互傳後結(jié)果不如預(yù)期。這是因?yàn)闆]認(rèn)清物件參考的原因,每宣告一個(gè)物件實(shí)體作業(yè)系統(tǒng)都會(huì)分配一塊記憶體空間,因此需認(rèn)清本來的Form1表單與Form2內(nèi)新宣告的Form1是不同的物件參考這個(gè)事實(shí)。

 

方法二 透過靜態(tài)變數(shù)互通表單資料

透過靜態(tài)變數(shù)也是可以互通表單資料的方法,使用起來很簡(jiǎn)單,只要宣告?zhèn)€靜態(tài)變數(shù),接著把該靜態(tài)變數(shù)指向物件參考,則程式內(nèi)就可透過該靜態(tài)變數(shù)做資料的互通,但是該方法較不建議採(cǎi)用。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多