高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第1頁
高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第2頁
高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第3頁
高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第4頁
高中信息技術(shù)粵教版高中必修信息技術(shù)基礎(chǔ)第二章信息的獲取-信息的鑒別與評(píng)價(jià)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論