資源描述:
《總結(jié)c#中窗體間傳遞數(shù)據(jù)的幾種方法》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、總結(jié)C#中窗體間傳遞數(shù)據(jù)的幾種方法(由別人的方法整理)??在編寫C#windows應(yīng)用程序的時候我們經(jīng)常會遇到這種問題,怎么樣在兩個窗體間傳遞數(shù)據(jù)呢?以下是我整理的網(wǎng)上的各種方法,在遇到一個實際問題:在form1中打開一個form2窗口作為錄入界面,將錄入的值經(jīng)轉(zhuǎn)換后在form1中顯示。采用了委托的方法,可以實現(xiàn)。(與VC的回調(diào)的應(yīng)用相似)1.可以通過委托的方法來解決問題:通過form1做一個錄入界面,將里邊通過文本框錄入的數(shù)值復(fù)值給form2中的listview各列,用3個textbox1.text舉例吧,分別對應(yīng)listvi
2、ew的3個列??梢赃@么做,如果兩個窗體是在同一個命名空間下定義一個代理,注意這個代理是全局的:(即同一命名空間下,與Form1,F(xiàn)orm2平級的)publicdelegatevoidMyInvoke(stringItem1,stringItem2,stringItem3);?//在窗體From2中有這么一個回調(diào)函數(shù),用于在ListView里添加一個新項的:privatevoidUpdateListView(stringItem1,stringItem2,stringItem3){???ListView1.Items.Add(It
3、em1);???ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Item2);???ListView1.Items[ListView1.Items.Count-1].SubItems.Add(Item3);}?//比如說點擊Form2的一個按鈕彈出Form1進行錄入,在點擊按鈕的事件下://把委托傳過去Form1frmEdit=newForm1(newMyInvoke(UpdateListView));frmEdit.ShowDialog(this);?//在Form1
4、里定義一個屬性privateMyInvokemi=null;?在構(gòu)造函數(shù)中接收這個委托:publicForm1(MyInvokemyInvoke){??this.mi=myInvoke;}?//錄入數(shù)據(jù)后,點擊OK按鈕,在點擊事件下://回調(diào)this.mi(this.TextBox1.Text,this.TextBox3.Text,this.TextBox3.Text);this.Close();//關(guān)閉Form1補充:如果我要是想再把form2的值給form1,F(xiàn)orm1frmEdit=newForm1(newMyInvoke
5、(UpdateListView),stringpara1,stringpara2...);frmEdit.ShowDialog(this);然后將Form1的構(gòu)造函數(shù)改成可以接收幾個參數(shù)的就行了。?2.假如主框架為Form1,打開的搜索對話框是Form2.直接在Form2類中申明一個Form1實例:Form1f1=newForm1();然后就可以通過f1來調(diào)用Form1中的域和函數(shù)了。其實不是這樣的,你申明的新的Form1實例不是原來的那個Form1對象了,這樣操作的是新的Form1中的域和函數(shù),和最先打開的Form1是沒有關(guān)系
6、的。我們要做的是把當(dāng)前的Form1實例傳遞給Form2,如果是這樣的話,問題就很好解決了。方法1:首先,我們在Form2中定義:privateForm1mF_Form我們更改Form2的構(gòu)造函數(shù)為有參數(shù)的publicForm2(Form1myForm){////Windows窗體設(shè)計器支持所必需的//InitializeComponent();this.mF_Form?=myForm;??/////這樣在Form1中申明Form2的時候就把Form1的實例傳遞過來了////TODO:在InitializeComponent調(diào)用后
7、添加任何構(gòu)造函數(shù)代碼//}在Form1中,我在要用到Form2的地方申明如下:Form2f2=new?Form2(this);////這里的this指的就是Form1當(dāng)前的實例,也就是把當(dāng)前Form1的實例通過Form2的構(gòu)造函數(shù)傳遞給Form2類(其實在網(wǎng)上看到過比較蠢的方式,就是在構(gòu)造函數(shù)里面?zhèn)鬟f要傳遞的信息如:字符串或是數(shù)字等,這樣做很有局限性,不能傳遞其他的,所有我們可以直接傳遞實例,來完成傳遞更多的信息。)這樣在Form2中使用myForm就可以對原來的Form1窗口進行操作了。但是你要把要操作的Form1中的域和函數(shù)
8、定義成public形式的(這樣可能不安全),此時的myForm就是真正的最開始打開的Form1了,你可以用這個實例來進行兩個窗體的通訊了。()3.其實C#中提供了窗體間進行通訊的現(xiàn)成的屬性,呵呵,我們能想到的,微軟也想到了,他們創(chuàng)造的語言其實確實可以說是人性化了