版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、總結(jié)C#中窗體間傳遞數(shù)據(jù)的幾種方法(由別人的方法整理)?在編寫C#windows應(yīng)用程序的時候我們經(jīng)常會遇到這種問題,怎么樣在兩個窗體間傳遞數(shù)據(jù) 呢?以下是我整理的網(wǎng)上的各種方法,在遇到個實際問題:在forml中打開個form2窗口 作為錄入界而,將錄入的值經(jīng)轉(zhuǎn)換后在forml中顯示。采用了委托的方法,可以實現(xiàn)。(與VC 的回調(diào)的應(yīng)用相似)1. 可以通過委托的方法來解決問題:通過form 1做個錄入界而,將里邊通過文本框錄入的數(shù)值復(fù)值給form2中的listview各 列,用3個textbox 1.text舉例吧,分別對應(yīng)listview的3個列??梢赃@么做,如果兩個窗體是在同一個命名空間下定
2、義個代理,注意這個代理是全局的:(即同命名空間下,與Forml, Form2平級的)public delegate void Mylnvoke(string Iteml,string Item2,string Item3);在窗體From2中有這么個回調(diào)函數(shù),用于在UstView里添加個新項的:private void UpdateListView(string Iteml/String Item2zstring Item3)比如說點擊Form2的-個按鈕彈出Forml進(jìn)行錄入,在點擊按鈕的事件下:把委托傳過去Forml frmEdit=new Form 1(new Mylnvoke(Upda
3、teListView);frmEdit.ShowDialog(this);在Forml里定義一個屬性private Mylnvoke mi=null;在構(gòu)造函數(shù)中接收這個委托:public Forml(MyInvoke mylnvoke)? this.mi=mylnvoke;錄入數(shù)據(jù)后,點擊0K按鈕,在點擊事件下: 回調(diào)this.Close();關(guān)閉 Forml補充:如果我要是想再把form2的值給forml,Forml frmEdit=new Forml(new MyInvoke(UpdateListView)zstring paralzstring para2.);frmEdit.Show
4、Dialog(this);然后將Forml的構(gòu)造函數(shù)改成可以接收幾個參數(shù)的就行了。2. 假如主框架為Forml,打開的搜索對話框是Form2.直接在Form2類中申明個Forml實例: Forml fl=new Foml();然后就可以通過fl來調(diào)用Forml中的域和函數(shù)其實不是這樣的, 你申明的新的Forml實例不是原來的那個Forml對象這樣操作的是新的Forml中的域和函 數(shù),和最先打開的Forml是沒有關(guān)系的。我們要做的是把當(dāng)前的Forml實例傳遞給Form2,如果是這樣的話,問題就很好解決了。方法1:首先,我們在Form2中定義:private Forml mF_Form我們更改Fo
5、rm2的構(gòu)造函數(shù)為有參數(shù)的public Form2 ( Forml myForm )/ Windows窗體設(shè)計器支持所必需的IIInitializeComponent ();this.mF_Form? = myForm ;?/這樣在Forml中申明Form2的時候就把Forml的實例傳遞 過來了/ TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼/在Forml中,我在 妥用到Form2的地方申明如下:Form2 f2=new? Form2(this);/這里的this指的就是Forml當(dāng)前的實例,也就是把當(dāng)前Forml的實例通過Form2的構(gòu)造函數(shù)傳遞給Form2類
6、(其實在網(wǎng)上看到過比較抵的方式,就是在構(gòu)造 函數(shù)里而傳遞要傳遞的信息如:字符串或是數(shù)字等,這樣做很有局限性,不能傳遞其他的,所有 我們可以直接傳遞實例,來完成傳遞更多的信息。)這樣在Form2中使用myForm就可以對原來的Forml窗口進(jìn)行操作了。但是你要把耍操作的 Forml中的域和函數(shù)定義成public形式的(這樣可能不安全),此時的myForm就是真正的最 開始打開的Forml 了,你可以用這個實例來進(jìn)行兩個窗體的通訊了。()3. 其實C#中提供了窗體間進(jìn)行通訊的現(xiàn)成的屬性,呵呵,我們能想到的,微軟也想到他 們創(chuàng)造的語言其實確實可以說是人性化了。在Formi類中申明Form2時用如下代
7、碼:Form2 f2=new Form2();/類Form2中的構(gòu)造函數(shù)不改,還是無參的f2.owner=this;/這里的this指的是類Forml當(dāng)前的實例。也可以使用函數(shù)的方法,給當(dāng)前實例添加個附屬窗口?代碼:this.AddOwnedForm(f2);在Form2類的定義中寫如下代碼:Forml fl=this.owner;這樣fl對應(yīng)的就是原來的Form 1的實例了,也就可以用這個進(jìn)行通訊了。但是還是要把不同類 之間訪問的域和函數(shù)定義成public,哎,安全確實是個問題! !?4.使用靜態(tài)類?這個也是我們經(jīng)常要用到的-種數(shù)據(jù)交互方法。下面是定義的一個類:using System;us
8、ing System.Collections;namespace ZZ? public class AppDatas? z 1? private static ArrayList listData;? static AppDatas()? ? listData = new ArrayList();? listDataAdd(”DotNet“);? listData.Add(,C#M);? listData.Add(HA”);? listData.Add(HWebServiceH);? listData.Add(,XML,');? ? public static ArrayList Li
9、stData? ? getreturn listData;? ? public static ArrayList GetListData()? ? return listData;? ? J上聞包含了 個靜態(tài)類成員 listData, 個靜態(tài)構(gòu)造函數(shù)static AppDatas(),用來初始化listData 的數(shù)據(jù)。還有個靜態(tài)屬性ListData和個靜態(tài)GetListData()方法,他們實現(xiàn)了同樣的功能就 是返回listData o由于前面兩篇文章已經(jīng)講了很多,這里不細(xì)說了,下而是完整的代碼:Forml.cs 文件using System;using System.Drawing;usi
10、ng System.Collections;using System.ComponentModel;namespace ZZ? z 1? public Forml()? ? InitializeComponent();? ? protected override void Dispose( bool disposing )? ? if( disposing )? if(components != null)? components.Dispose();? base.Dispose( disposing );? ? STAThread? static void Main()? ? Applica
11、tion.Run(new Forml();? ? private void InitializeComponent()? ? this.SuspendLayout();? this.Name = "Forml"? this.Text = "Form I'1;? this.ResumeLayout(false);? ? private void buttonEdit_Click(object sender, System.EventArgs e)? ? Form2 formChild = new Form2();? formChild.ShowDialog(
12、);? Form2.cs 文件using System.Drawing;using System.Collect!ons;using System.ComponentModel;namespace ZZ? <nOK;? public Form2()? ? InitializeComponent();? foreach(object o in AppDatas.ListData)? ? protected override void Dispose( bool disposing )? if( disposing )? if(components != null)? components.
13、Dispose();? base.Dispose( disposing );? ? private void InitializeComponent()? ? this.SuspendLayout();確定";Frm2M;增加";? this.Name = "FormZ'? this.Text = ”Form2:? this.ResumeLayout(false);? ? private void buttonOK_Click(object sender, System.EventArgs e)? ? this.Close();? ? private vo
14、id buttonAdd_Click(object sender, System.EventArgs e)? ? ? ? else? MessageBox.ShowC'請輸入添加的內(nèi)容!”);? ? private void buttonDeLClick(object sender, System.EventArgs e)? ? if(index!=-l)? ? ? else? MessageBox.Show(n請選擇刪除項);? ? J?總結(jié),我認(rèn)為使用靜態(tài)類比較多的地方就是把應(yīng)用程序的配置文件裝載到個靜態(tài)類里面, 讓所有的窗體和其他實例都可以通過靜態(tài)屬性以及靜態(tài)方法使用這些數(shù)據(jù),比
15、如三層結(jié)構(gòu)或多層 結(jié)構(gòu)都可以訪問它,而不是在多個實例間傳來傳去。在這里我們討論的是Windows窗體,其實 在兩個不同的實例間交互數(shù)據(jù),都可以采用三篇文章中的方案實現(xiàn),除非是這個類特有的屬性或 若方法。現(xiàn)在都講完了,雖然不是什么高深的東西,但是希望能對些初學(xué)者有所幫助,同時也 歡迎各位朋友進(jìn)行技術(shù)交流,共同提高。分析上面幾種方法:1. ?采用了委托的方法,可以實現(xiàn)。:很好的實現(xiàn)了數(shù)據(jù)處理與數(shù)據(jù)顯示的分離,即FORM2 主)顯示與FORM1數(shù)據(jù)處理,(不需耍將FORM2的顯示放在FORM1中)與VC的回調(diào)的應(yīng)用有延續(xù)性。并且確保了 FORM1中要修改的屬性的私有性。2. ?方法2、3都是傳遞主窗
16、口的引用,比較簡單易用??梢詫崿F(xiàn)FORM2 (主)與FORM 1所 有數(shù)據(jù)的傳遞(不過需要將要FORM1傳遞和要修改的數(shù)據(jù)設(shè)為PUBLIC),而這樣會存在安全 問題。委托方法可以很好地實現(xiàn)數(shù)據(jù)的保護(hù)總結(jié)C#中窗體間傳遞數(shù)據(jù)的幾種方法(由別人的方法整理)?在編寫C#windows應(yīng)用程序的時候我們經(jīng)常會遇到這種問題,怎么樣在兩個窗體間傳遞數(shù)據(jù) 呢?以下是我整理的網(wǎng)上的各種方法,在遇到個實際問題:在forml中打開個form2窗口 作為錄入界而,將錄入的值經(jīng)轉(zhuǎn)換后在forml中顯示。采用委托的方法,可以實現(xiàn)。(與VC的回調(diào)的應(yīng)用相似)1.可以通過委托的方法來解決問題:通過form 1做個錄入界面,
17、將里邊通過文本框錄入的數(shù)值復(fù)值給form2中的listview各列,用3個textbox 1.text舉例吧,分別對應(yīng)listview的3個列。可以這么做,如果兩個窗體是在同個命名空間下定義個代理,注盤這個代理是全局的:(即同 諭名空間下,與Forml, Form2平級的)public delegate void Mylnvoke(string Iteml,string Item2,string Item3);在窗體From2中有這么個回調(diào)函數(shù),用于在UstView里添加個新項的:private void UpdateListView(string Iteml/String Item2,str
18、ing Item3)比如說點擊Form2的-個按鈕彈出Forml進(jìn)行錄入,在點擊按鈕的事件下:把委托傳過去Forml frmEdit=new Form 1(new Mylnvoke(UpdateListView);frmEdit.ShowDialog(this);在Forml里定義一個屬性private Mylnvoke mi=null;在構(gòu)造函數(shù)中接收這個委托:public Forml(Myinvoke mylnvoke)? this.mi=mylnvoke;錄入數(shù)據(jù)后,點擊OK按鈕,在點擊事件下:回調(diào)this.Close();關(guān)閉 Forml補充:如果我要是想再把form2的值給forml
19、,Forml frmEdit=new Form 1(new Mylnvoke(UpdateListView),string paral,string para2.);frmEdit.ShowDialog(this);然后將Forml的構(gòu)造函數(shù)改成可以接收幾個參數(shù)的就行了。2.假如主框架為Forml,打開的搜索對話框是Form2.直接在Form2類中申明 個Forml實例: Forml fl=new Forml();然后就可以通過fl來調(diào)用Forml中的域和函數(shù)了。其實不是這樣的, 你申明的新的Forml實例不是原來的那個Forml對象這樣操作的是新的Forml中的域和函 數(shù),和最先打開的For
20、ml是沒有關(guān)系的。我們要做的是把當(dāng)前的Forml實例傳遞給Form2,如果是這樣的話,問題就很好解決了。方法1:首先,我們在Form2中定義:private Forml mF_Form我們更改Form2的構(gòu)造函數(shù)為有參數(shù)的public Form2 ( Forml myForm )/ Windows窗體設(shè)計器支持所必需的/InitializeComponent ();this.mF_Form? = myForm ;? /這樣在Forml中申明Form2的時候就把Forml的實例傳遞 過來了/ TODO:在InitializeComponent調(diào)用后添加任何構(gòu)造函數(shù)代碼/在Form 1.中,我在
21、妥用到Form2的地方申明如下:Form2 f2=new? Form2(this);/這里的this指的就是Forml當(dāng)前的實例,也就是把當(dāng)前Forml 的實例通過Form2的構(gòu)造函數(shù)傳遞給Form2類(其實在網(wǎng)上看到過比較抵的方式,就是在構(gòu)造 函數(shù)里而傳遞要傳遞的信息如:字符串或是數(shù)字等,這樣做很有局限性,不能傳遞其他的,所有 我們可以直接傳遞實例,來完成傳遞更多的信息。)這樣在Form2中使用myForm就可以對原來的Forml窗口進(jìn)行操作了。但是你要把耍操作的 Forml中的域和函數(shù)定義成public形式的(這樣可能不安全),此時的myForm就是真正的最 開始打開的Forml 了,你可
22、以用這個實例來進(jìn)行兩個窗體的通訊了。()3. 其實C#中提供了窗體間進(jìn)行通訊的現(xiàn)成的屬性,呵呵,我們能想到的,微軟也想到他 們創(chuàng)造的語言其實確實可以說是人性化了。在Forml類中申明Form2時用如下代碼:Form2 f2=new Form2();/類Form2中的構(gòu)造函數(shù)不改,還是無參的f2.owner=this;/這里的this指的是類Forml當(dāng)前的實例。也可以使用函數(shù)的方法,給當(dāng)前實例添加個附屬窗口?代碼:this.AddOwnedForm(f2);在Form2類的定義中寫如下代碼:Forml fl=this.owner;這樣fl對應(yīng)的就是原來的Forml的實例了,也就可以用這個進(jìn)行通
23、訊了。但是還是要把不同類 之間訪問的域和函數(shù)定義成public,哎,安全確實是個問題! !? 4.使用靜態(tài)類?這個也是我們經(jīng)常要用到的-種數(shù)據(jù)交互方法。下面是定義的一個類:using System;using System.Collections;namespace ZZ? public class AppDatas? Z 1? private static ArrayList listData;? static AppDatas()? ? listData = new ArrayList();? listDataAdd(”DotNetJ;? listData.AddC,C#H);? list
24、Data.Add(HA”);? listData.Add(nWebServicen);? listDataAdd(”XM);? ? public static ArrayList ListData? ? getreturn listData;? ? public static ArrayList GetListData()? ? return listData;? ? I上包含了 個靜態(tài)類成員 listData, 個靜態(tài)構(gòu)造函數(shù)static AppDatas(),用來初始化listData 的數(shù)據(jù)。還有個靜態(tài)屬性ListData和個靜態(tài)GetListData()方法,他們實現(xiàn)了同樣的功能就 是
25、返回listData o由于前而兩篇文章已經(jīng)講了很多,這里不細(xì)說了,下面是完整的代碼:Forml.cs 文件using System;using System.Drawing;using System.Collections;using System.ComponentModel;namespace ZZ? / 1? public Forml()? ? InitializeComponent();? ? protected override void Dispose( bool disposing )? ? if( disposing )? if(components != null)? co
26、mponents.Dispose();? base.Dispose( disposing );? ? STAThread? static void Main()? ? Application.Run(new Forml();? ? private void InitializeComponent()? ? this.SuspendLayout();? this. Name = 'Forml"? this.Text = ”Forml”;? this.ResumeLayout(false);? ? private void butt on Edit_Click(object se
27、nder, System. EventArgs e)? ? Form2 formChild = new Form2();? formChild.ShowDialog();? ? JForm2.cs 文件using System.Drawing;using System.Collections;using System.ComponentModel;namespace ZZ? z 1? public Form2()? ? InitializeComponentO;? foreach(object o in AppDatas.ListData)? ? protected override void Dispose( bool disposing )? ? if( disposing )? if(components != null)? components.Dispose();? base.Dispose( disposing );? ? private void In
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度鋁灰處理廢棄物安全處置合同4篇
- 二零二四年合同審查常年法律顧問合同3篇
- 2025年度路燈照明設(shè)備綠色供應(yīng)鏈采購合同4篇
- 年度智能手表市場分析及競爭策略分析報告
- 二零二五版環(huán)保設(shè)施采購合同范本參考3篇
- 2025年度高校創(chuàng)新創(chuàng)業(yè)基地共建合同3篇
- 2025年度鋁材產(chǎn)品安全檢測與認(rèn)證合同4篇
- 二零二四年幼兒園蔬菜配送及食品安全責(zé)任合同3篇
- 二零二五年度高端別墅房產(chǎn)買賣合同樣本3篇
- 2025預(yù)拌混凝土行業(yè)標(biāo)準(zhǔn)化建設(shè)與認(rèn)證合同示范文本3篇
- 地系梁工程施工方案
- 藏文基礎(chǔ)-教你輕輕松松學(xué)藏語(西藏大學(xué))知到智慧樹章節(jié)答案
- 2024電子商務(wù)平臺用戶隱私保護(hù)協(xié)議3篇
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 英語 含答案
- 電力工程施工安全風(fēng)險評估與防控
- 醫(yī)學(xué)教程 常見體表腫瘤與腫塊課件
- 內(nèi)分泌系統(tǒng)異常與虛勞病關(guān)系
- 智聯(lián)招聘在線測評題
- DB3418T 008-2019 宣紙潤墨性感官評判方法
- 【魔鏡洞察】2024藥食同源保健品滋補品行業(yè)分析報告
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題及答案
評論
0/150
提交評論