委托之winForm窗口间传递数据
2010-02-24 09:03
330 查看
在winForm应用程序中,窗口间数据的传递是最多的应用之一,尤其是在管理软件当中。
窗口的数据传递,有多种方式,在这篇随笔中主要是阐述一下利用委托如何来传递数据。
在本实例程序中,有两个窗体:一个主窗体FrmMain,接收数据;一个子窗体FrmChild,传出数据,UI如下:
在主窗体中,[设置]按钮,弹出子窗体,在文本框中输入相应的值后,点击[确认]返回到主窗体,同时返回数据至主窗体。
具体代码实现如下:
[b]一、定义事件类:[/b]
[b]二、在子窗体中设计如下代码:[/b]
[b]三、设计主窗体代码:[/b]
主窗体中[设置]按钮的代码如下:
主要用来打开子窗体,绑定事件。
在FrmChild_PassDataBetweenForm()方法中接收PassDataWinFormEventArgs实例传递回来的数据,故此FrmChild_PassDataBetweenForm()代码如下:
[b]四、后记:[/b]
0
0
0
(请您对文章做出评价)
«上一篇:委托之异步
»下一篇:Javascript获取CheckBoxList的value
try{
GS_googleAddAdSenseService("ca-pub-4210569241504288");
GS_googleEnableAllServices();
}
catch(e){}
try{
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_body");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_commentbox_up");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_bottom");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_bottom1");
}
catch(e){}
try{
GA_googleFetchAds();
}catch(e){}
varblog_ad_has_shown=false;
postedon2009-10-2423:19inforasc阅读(345)评论(9)编辑收藏网摘所属分类:C#基础知识
#1楼2009-10-2522:05WinForm初学者[未注册用户]
在子窗体中顶一个public的PassDataWinFormEventArgs,主窗体直接获取,这种方式有什么缺点呐?
回复引用
#2楼2009-10-2522:17netKing
调试走到这一步时,报错
PassDataBetweenForm(this,args);
错误是:未将对象引用设置到对象的实例。
回复引用查看
#3楼2009-10-2609:31邢少
什么意思?..你是要说明委托的一种应用方式吗?还是要说委托可以用来传递参数。
还是说它是一个回调函数。
回复引用查看
#4楼[楼主]2009-10-2620:33inforasc
@邢少
应该是委托的一种应用吧!
在winform之间传递数据的时候,曾经尝试过其他方法,比如用Owner属性,总是感觉耦合性较高!
回复引用查看
#5楼[楼主]2009-10-2620:36inforasc
@netKing
代码应该是没问题的,我是从Vs.Net源码里面直接黏贴出来的。
可以告诉我具体是哪一个对象未实例化么?
回复引用查看
#6楼2009-10-2708:39邢少
@inforasc
嗯。推荐。记得以前有一次有人问了我一个问题。问:有a界面,界面上有一个按钮,弹出b页面,实现b控制a页面的图片变化?有几种方式?最少3种
回复引用查看
#7楼2009-10-2723:35ibate86
谢谢楼主,虽然不知道是不是新的思路,但却是第一次听说。多谢~
回复引用查看
#8楼[楼主]2009-10-2801:37inforasc
@ibate86
不是新思路,是实际项目中使用的,而且在一些技术文章上也看到过,好像在CodeProject上
回复引用查看
#9楼2010-01-0413:43StephenJu
viewsource
print?
窗口的数据传递,有多种方式,在这篇随笔中主要是阐述一下利用委托如何来传递数据。
在本实例程序中,有两个窗体:一个主窗体FrmMain,接收数据;一个子窗体FrmChild,传出数据,UI如下:
在主窗体中,[设置]按钮,弹出子窗体,在文本框中输入相应的值后,点击[确认]返回到主窗体,同时返回数据至主窗体。
具体代码实现如下:
[b]一、定义事件类:[/b]
publicclassPassDataWinFormEventArgs:EventArgs { publicPassDataWinFormEventArgs() { // } publicPassDataWinFormEventArgs(stringrefName,stringrefPlace,intrefAge) { this._name=refName; this._place=refPlace; this._age=refAge; } privatestring_name; privatestring_place; privateint_age; publicstringName { get{return_name;} set{_name=value;} } publicstringPlace { get{return_place;} set{_place=value;} } publicintAge { get{return_age;} set{_age=value;} } }
通过PassDataWinFormEventArgs的实例,传递数据。
[b]二、在子窗体中设计如下代码:[/b]
//添加一个委托 publicdelegatevoidPassDataBetweenFormHandler(objectsender,PassDataWinFormEventArgse); //添加一个PassDataBetweenFormHandler类型的事件 publiceventPassDataBetweenFormHandlerPassDataBetweenForm;
书写子窗体确认按钮的代码如下:
privatevoidbbtOK_Click(objectsender,EventArgse) { stringname,place; intage; name=txtName.Text; place=txtPlace.Text; Int32.TryParse(txtAge.Text,outage); PassDataWinFormEventArgsargs=newPassDataWinFormEventArgs(name,place,age); PassDataBetweenForm(this,args); this.Dispose(); }
[b]三、设计主窗体代码:[/b]
主窗体中[设置]按钮的代码如下:
privatevoidbbtSetup_Click(objectsender,EventArgse) { FrmChildfrmChild=newFrmChild(); frmChild.PassDataBetweenForm+=newFrmChild.PassDataBetweenFormHandler(FrmChild_PassDataBetweenForm); frmChild.Show(); frmChild.Activate(); }
在FrmChild_PassDataBetweenForm()方法中接收PassDataWinFormEventArgs实例传递回来的数据,故此FrmChild_PassDataBetweenForm()代码如下:
privatevoidFrmChild_PassDataBetweenForm(objectsender,PassDataWinFormEventArgse) { this.txtName.Text=e.Name; this.txtPlace.Text=e.Place; this.txtAge.Text=e.Age.ToString(); }
[b]四、后记:[/b]
利用委托进行数据传递,有一个很大的优点就是,可以在任何窗体中调用子窗体,而不用修改子窗体内部的设计,从而达到高度复用子窗体。
0
0
0
(请您对文章做出评价)
try{
GS_googleAddAdSenseService("ca-pub-4210569241504288");
GS_googleEnableAllServices();
}
catch(e){}
try{
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_body");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_commentbox_up");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_bottom");
GA_googleAddSlot("ca-pub-4210569241504288","cnblogs_blogpost_bottom1");
}
catch(e){}
try{
GA_googleFetchAds();
}catch(e){}
varblog_ad_has_shown=false;
postedon2009-10-2423:19
评论
1740010在子窗体中顶一个public的PassDataWinFormEventArgs,主窗体直接获取,这种方式有什么缺点呐?
调试走到这一步时,报错
PassDataBetweenForm(this,args);
错误是:未将对象引用设置到对象的实例。
什么意思?..你是要说明委托的一种应用方式吗?还是要说委托可以用来传递参数。
还是说它是一个回调函数。
应该是委托的一种应用吧!
在winform之间传递数据的时候,曾经尝试过其他方法,比如用Owner属性,总是感觉耦合性较高!
代码应该是没问题的,我是从Vs.Net源码里面直接黏贴出来的。
可以告诉我具体是哪一个对象未实例化么?
嗯。推荐。记得以前有一次有人问了我一个问题。问:有a界面,界面上有一个按钮,弹出b页面,实现b控制a页面的图片变化?有几种方式?最少3种
谢谢楼主,虽然不知道是不是新的思路,但却是第一次听说。多谢~
不是新思路,是实际项目中使用的,而且在一些技术文章上也看到过,好像在CodeProject上
01 | private void bbtOK_Click( object sender,EventArgse) |
02 | { string name,place; |
03 | int age; |
04 | name=txtName.Text; |
05 | place=txtPlace.Text; |
06 | Int32.TryParse(txtAge.Text, out age); |
07 | if (PassDataBetweenForm!= null ) |
08 | { |
09 | PassDataWinFormEventArgsargs= new PassDataWinFormEventArgs(name,place,age);PassDataBetweenForm( this ,args); |
10 | this .Dispose(); |
11 | } |
相关文章推荐
- 委托之winForm窗口间传递数据
- 委托之winForm窗口间传递数据
- IOS开发使用委托delegate在不同窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- 使用委托(delegate)在不同的窗口之间传递数据
- iPhone使用委托在不同的窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- IOS开发使用委托delegate在不同窗口之间传递数据
- iPhone使用委托在不同的窗口之间传递数据
- 【委托】 IOS开发使用委托delegate在不同窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据
- 【转】IOS开发使用委托delegate在不同窗口之间传递数据
- IOS开发使用委托delegate在不同窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据-转
- iPhone使用委托在不同的窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据(转)
- IOS开发使用委托delegate在不同窗口之间传递数据
- iphone 使用委托(delegate)在不同的窗口之间传递数据