![高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第1頁](http://file4.renrendoc.com/view7/M01/27/39/wKhkGWcQ0iuAL19mAADHsIlNkLE717.jpg)
![高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第2頁](http://file4.renrendoc.com/view7/M01/27/39/wKhkGWcQ0iuAL19mAADHsIlNkLE7172.jpg)
![高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第3頁](http://file4.renrendoc.com/view7/M01/27/39/wKhkGWcQ0iuAL19mAADHsIlNkLE7173.jpg)
![高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第4頁](http://file4.renrendoc.com/view7/M01/27/39/wKhkGWcQ0iuAL19mAADHsIlNkLE7174.jpg)
![高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第5頁](http://file4.renrendoc.com/view7/M01/27/39/wKhkGWcQ0iuAL19mAADHsIlNkLE7175.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
創(chuàng)建一個(gè)Winform窗體應(yīng)用程序項(xiàng)目,然后添加一個(gè)Form2窗體。
H解決方案WindowsForms跨窗體傳值大全”(1個(gè)項(xiàng)目)
/厘]WindowsForms跨窗體傳值大全
?AProperties
>引用
口App.config
?國Form1.cs
?國Form2.cs
?c*Program.cs
在Forml和Form2中各添加一個(gè)textBox和button:
單擊Forml中的buttonl,彈出Form2,然后要做的就是在Forml中的textBoxl和Form2中的textBox2中傳值。
為了方便起見,將Forml稱作父窗體,將Form2稱作子窗體。
相對來說,將父窗體的值傳到子窗體較為容易實(shí)現(xiàn)。下面分別進(jìn)行說明。
一、父窗體傳值給子窗體。
方法1:通過Form類構(gòu)造方法的重載傳參。
Forml類中代碼:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2(textBoxl.Text);16
f2.ShowDialog();17)18}19}
Fo「m2類中代碼:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11}1213publicForm2(stringstr)14{15
InitializeComponent();16textBox2.Text=str;//這句必須放在InitializeComponent()
否則會(huì)引起''空引用異常”17}1819}20)
*Form□X
2016buttonl
■9Form2□x
2016button2
方法2:通過外部可訪問的中間變量傳參。
先看一串無法實(shí)現(xiàn)目的的代碼。
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11)1213publicstringstr;//public類型的實(shí)例字段1415
privatevoidbuttonl_Click(objectsender,EventArgse)16{17Form2f2=new
Form2();18str=textBoxl.Text;//ftA,這句不能放在£2.ShowDialog();的后面,否則會(huì)先執(zhí)行
textBox2.Text=f1.str;再執(zhí)行str=textBoxl.Text;19f2.ShowDialog();20}
21}22}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11}1213privatevoidForm2_Load(objectsender,EventArgs
e)14{15Formlfl=newForml();16textBox2.Text=f1.str;17}18
19}20)
結(jié)果值沒有傳過來:
■BForml□X
2016button1
■S1Form2□x
button2
這是因?yàn)椋篎ormlfl=newForml。;相當(dāng)于新建了一,個(gè)對象,這個(gè)新對象的str初始值是null(只有該對象的buttonl
被click的時(shí)候才會(huì)改變str的值)。textBox2.Text=fl.str;其實(shí)就是將null賦給了textBox2.Text。
調(diào)試如圖:
privatevoidForm2_Load(objectsender,EventArgse)
(
驗(yàn)理工fl=newForml。;
textBox2.Text=fl.str;
.fl.strhull
static變量可以認(rèn)為是全局變量,static變量被所有對象所共有,也可以被所有對象所改變,將相關(guān)代碼修改如下即可:
publicstaticstringstr;//public類型的實(shí)例字段
privatevoidForm2_Load(objectsender,EventArgse)
textBox2.Text=Forml.str;
)
它有一種變式:
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2();16f2.str=textBoxl.Text;17
f2.ShowDialog();1819}20}21}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11)1213publicstringstr;//這里str是在Form2類中定義的,并且
不需要static關(guān)鍵字1415privatevoidForm2_Load(objectsender,EventArgse)16{17
textBox2.Text=str;18}1920}21}
分析:f2.str=textBoxLText;將textBoxl的值賦給f2.str,由于f2.ShowDialog();跳出來的剛好是這個(gè)對象,因此
這個(gè)對象的str值不為空。最終通過textBox2,Text=str;將值傳過去了。跟上一個(gè)例子的不同之處是:str聲明的位置
不一樣,一個(gè)是在Forml類中,一個(gè)是在Form2類中。
一、子窗體傳值給父窗體。
方法工:通過Owner設(shè)置窗口歸屬來傳值。
①通過Controls
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2();16£2.ShowDialog("this);//這個(gè)this必不
可少(將窗體顯示為具有指定所有者:窗體£2的所有者是Forml類當(dāng)前的對象)17}18}19}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11}1213privatevoidbutton2_Click(objectsender,EventArgs
e)14{15Formlfl=(Forml)this.Owner;//將本窗體的擁有者強(qiáng)制設(shè)為Forml類的實(shí)例£116
fl.Controls["textBoxln].Text=textBox2.Text;17}1819}20}
fiForml□XiflForml
2016buttonl900
■9Form2□x■Form2
900|button2900
②通過在控件所在類中增加改變控件屬性的方法
或者通過在Forml中添加一個(gè)ChangeText方法也行:
publicvoidChangeText(stringstr)
(
textBoxl.Text=str;
}
Form2中代碼相應(yīng)改變?yōu)椋?/p>
privatevoidbutton2_Click(objectsender,EventArgse)
{
Formlfl=(Forml)this.Own一r;//將本窗體的擁有者強(qiáng)制設(shè)為Forml類的實(shí)例fl
fl.ChangeText(textBox2.Text);
)
注意:如果不用Owner,僅僅想用下面的代碼實(shí)現(xiàn),是沒可能的。
//Form工中:usingSystem;usingSystem.Windows.Forms;
namespaceWindowsForms跨窗體傳值大全
publicpartialclassForml:Form
publicForml()
InitializeComponent();
privatevoidbuttonl_Click(objectsender,EventArgse)
Form2f2=newForm2();
f2.ShowDialog();
)
publicvoidChangeText(stringstr)
textBoxl.Text=str;
}
)
//Form2中:usingSystem;usingSystem.Windows.Forms;
namespaceWindowsForms跨窗體傳值大全
publicpartialclassForm2:Form
publicForm2()
InitializeComponent();
)
privatevoidbutton2_Click(objectsender,EventArgse)
Formlfl=newForml();
fl.ChangeText(textBox2.Text);
//這種代碼無法實(shí)現(xiàn)目的
③通過將外界不可訪問的控件、、屬性〃封裝成可以訪問的屬性。
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2();16f2.ShowDialog(this);17}1819
publicstringTextBoxlValue20{21set{textBoxl.Text=value;}22get
{returntextBoxl.Text;}23}2425}26}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11}1213privatevoidbutton2_Click(objectsender,EventArgs
e)14{15Formlfl=(Forml)this.Owner;16fl.TextBoxlValue=
textBox2.Text;17}1819}20}
方法2:通過提供外部可訪問的屬性和DialogResult的狀態(tài)來傳值(這個(gè)例子同時(shí)實(shí)現(xiàn)了父傳子、子傳父)。
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2();16f2.TextBox2Value=
t一xtBoxl.Text;//順便把父窗體的值先傳給子窗體1718//這一行不需要再寫f2.ShowDialog();或者
f2.Show()否則£2會(huì)彈出來兩次1920if(f2.ShowDialog()==DialogResu工t.OK)//這樣的語句是
合法的:DialogResultf=f2.ShowDialog();21{22textBoxl.Text=
f2.TextBox2Value;23//f2.Clos一();//這一句寫或者不寫,£2都會(huì)關(guān)閉24}
25}26}27}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForm2:Form7{8publicForm2()9{10
InitializeComponent();11)1213publicstringTextBox2Value〃將外部不可訪問的
textBox2.Text封裝成屬性TextBoxlValuel4{15set{textBox2.Text=value;}16
get{returntextBox2.Text;}17}1819privatevoidbutton2_Click(objectsender,
EventArgse)20{21this.DialogResult=DialogResult.OK;//這里的DialogResult是
Form2類對象的屬性22}2324}25}
方法3:通過委托事件來傳值。(這種方式可以實(shí)現(xiàn)不同控件數(shù)據(jù)實(shí)時(shí)聯(lián)動(dòng)的復(fù)雜功能)
Forml中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicpartialclassForml:Form7{8publicForml()9{10
InitializeComponent();11}1213privatevoidbuttonl_Click(objectsender,EventArgs
e)14{15Form2f2=newForm2();16f2.ChangeText+=new
ChangeTextHandler(Change_Text);//將事件和處理方法綁在一起,這句話必須放在f2.ShowDialog();前面17
f2.ShowDialog();18}1920publicvoidChange_Text(stringstr)21{22
textBoxl.Text=str;23}24}25}
Form2中:
1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗體傳值大全5{6
publicdelegatevoidChangeTextHandler(stringstr);//定義委托78publicpartialclassForm2:
Form9{10publicForm2()11{12InitializeComponent();13)1415
publiceventChangeTextHandlerChangeText;//定義事件1617privatevoid
button2_Click(objectsender,EventArgse)18{19if(ChangeText!=null)//判斷事
件是否為空20{21ChangeText(textBox2.T一xt);//執(zhí)行委托實(shí)例22
this.Close();23)24}25}26}
可以用.NET提供的Actionv>泛型委托和lambda表達(dá)式簡化上面這個(gè)例子:
1//Forml中:2usingSystem;3usingSystem.Windows.Forms;45namespaceWindowsForms跨窗體傳
值大全6{7publi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代物流倉儲(chǔ)管理技術(shù)中的智能分揀系統(tǒng)
- 電信運(yùn)營商品牌危機(jī)管理與應(yīng)對
- 物流行業(yè)商業(yè)模式的創(chuàng)新與突破
- 2025年度節(jié)能環(huán)保鍋爐設(shè)備購銷合同范本
- 2025年度環(huán)保設(shè)備維修與運(yùn)營維護(hù)服務(wù)合同范本
- 2025年度國際貨物買賣合同法律風(fēng)險(xiǎn)分析與應(yīng)對
- 用戶體驗(yàn)在工業(yè)產(chǎn)品設(shè)計(jì)中的應(yīng)用案例
- 2025年度市政道路綠化養(yǎng)護(hù)施工分包合同樣本
- 【培優(yōu)卷】同步分層練習(xí):五年級(jí)下冊語文第7課《猴王出世》(含答案)
- 現(xiàn)代藝術(shù)創(chuàng)作中的技術(shù)革新與教育發(fā)展
- 《人工智能發(fā)展史》課件
- 小學(xué)一年級(jí)數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 自動(dòng)化設(shè)備技術(shù)合作協(xié)議書范文
- 詳情頁測試文檔20220802
- 品牌形象的12個(gè)原型
- 專利糾紛行政調(diào)解辦案指南
- 經(jīng)編工藝基本樣布的分析
- 中醫(yī)針灸穴位現(xiàn)代研究
- 完整版陸河客家請神書
- 國家電網(wǎng)公司畢業(yè)生應(yīng)聘申請表
- 通用5軸焊錫機(jī)系統(tǒng)(V11)
評(píng)論
0/150
提交評(píng)論