高中信息技术粤教版高中必修信息技术基础第二章信息的获取-信息的鉴别与评价_第1页
高中信息技术粤教版高中必修信息技术基础第二章信息的获取-信息的鉴别与评价_第2页
高中信息技术粤教版高中必修信息技术基础第二章信息的获取-信息的鉴别与评价_第3页
高中信息技术粤教版高中必修信息技术基础第二章信息的获取-信息的鉴别与评价_第4页
高中信息技术粤教版高中必修信息技术基础第二章信息的获取-信息的鉴别与评价_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

创建一个Winform窗体应用程序项目,然后添加一个Form2窗体。

H解决方案WindowsForms跨窗体传值大全”(1个项目)

/厘]WindowsForms跨窗体传值大全

»AProperties

>引用

口App.config

»国Form1.cs

»国Form2.cs

»c*Program.cs

在Forml和Form2中各添加一个textBox和button:

单击Forml中的buttonl,弹出Form2,然后要做的就是在Forml中的textBoxl和Form2中的textBox2中传值。

为了方便起见,将Forml称作父窗体,将Form2称作子窗体。

相对来说,将父窗体的值传到子窗体较为容易实现。下面分别进行说明。

一、父窗体传值给子窗体。

方法1:通过Form类构造方法的重载传参。

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()

否则会引起''空引用异常”17}1819}20)

*Form□X

2016buttonl

■9Form2□x

2016button2

方法2:通过外部可访问的中间变量传参。

先看一串无法实现目的的代码。

Forml中:

1usingSystem;2usingSystem.Windows.Forms;34namespaceWindowsForms跨窗体传值大全5{6

publicpartialclassForml:Form7{8publicForml()9{10

InitializeComponent();11)1213publicstringstr;//public类型的实例字段1415

privatevoidbuttonl_Click(objectsender,EventArgse)16{17Form2f2=new

Form2();18str=textBoxl.Text;//ftA,这句不能放在£2.ShowDialog();的后面,否则会先执行

textBox2.Text=f1.str;再执行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)

结果值没有传过来:

■BForml□X

2016button1

■S1Form2□x

button2

这是因为:Formlfl=newForml。;相当于新建了一,个对象,这个新对象的str初始值是null(只有该对象的buttonl

被click的时候才会改变str的值)。textBox2.Text=fl.str;其实就是将null赋给了textBox2.Text。

调试如图:

privatevoidForm2_Load(objectsender,EventArgse)

(

验理工fl=newForml。;

textBox2.Text=fl.str;

.fl.strhull

static变量可以认为是全局变量,static变量被所有对象所共有,也可以被所有对象所改变,将相关代码修改如下即可:

publicstaticstringstr;//public类型的实例字段

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关键字1415privatevoidForm2_Load(objectsender,EventArgse)16{17

textBox2.Text=str;18}1920}21}

分析:f2.str=textBoxLText;将textBoxl的值赋给f2.str,由于f2.ShowDialog();跳出来的刚好是这个对象,因此

这个对象的str值不为空。最终通过textBox2,Text=str;将值传过去了。跟上一个例子的不同之处是:str声明的位置

不一样,一个是在Forml类中,一个是在Form2类中。

一、子窗体传值给父窗体。

方法工:通过Owner设置窗口归属来传值。

①通过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);//这个this必不

可少(将窗体显示为具有指定所有者:窗体£2的所有者是Forml类当前的对象)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;//将本窗体的拥有者强制设为Forml类的实例£116

fl.Controls["textBoxln].Text=textBox2.Text;17}1819}20}

fiForml□XiflForml

2016buttonl900

■9Form2□x■Form2

900|button2900

②通过在控件所在类中增加改变控件属性的方法

或者通过在Forml中添加一个ChangeText方法也行:

publicvoidChangeText(stringstr)

(

textBoxl.Text=str;

}

Form2中代码相应改变为:

privatevoidbutton2_Click(objectsender,EventArgse)

{

Formlfl=(Forml)this.Own㊀r;//将本窗体的拥有者强制设为Forml类的实例fl

fl.ChangeText(textBox2.Text);

)

注意:如果不用Owner,仅仅想用下面的代码实现,是没可能的。

//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);

//这种代码无法实现目的

③通过将外界不可访问的控件、、属性〃封装成可以访问的属性。

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的状态来传值(这个例子同时实现了父传子、子传父)。

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会弹出来两次1920if(f2.ShowDialog()==DialogResu工t.OK)//这样的语句是

合法的:DialogResultf=f2.ShowDialog();21{22textBoxl.Text=

f2.TextBox2Value;23//f2.Clos㊀();//这一句写或者不写,£2都会关闭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:通过委托事件来传值。(这种方式可以实现不同控件数据实时联动的复杂功能)

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);//执行委托实例22

this.Close();23)24}25}26}

可以用.NET提供的Actionv>泛型委托和lambda表达式简化上面这个例子:

1//Forml中:2usingSystem;3usingSystem.Windows.Forms;45namespaceWindowsForms跨窗体传

值大全6{7publi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论