子窗体与父窗体间的传值--用委托实现
2011-07-01 10:07
204 查看
这2天因为需要做WinForm程序,需要把ASP的一个库存异动功能模块转成Winform程序,所以就遇见了窗体之间传值的这种情况 ,以前在肇庆上班的时候也做过这样的情形,当时还是初始做Winfom程序,主要是机器通信方面的,和单件模式联系比较密切。时隔差不多4个月,真的快忘记了,居然有开始做这个,所以没办法,只好还是又开始学习了。当时技术经理给我讲委托,事件的时候我是理解了个大概,算是囫囵吞枣吧,没啃明白。现在自己花了点时间,自己做了个DEMO出来,然后再套用到实际的开发环境中,虽然这套用的过程当中确实出现了很多问题,是我无法预料的,也许就是自己的基础还不牢靠,大脑的短路或者意识形态比较模糊,没想起一些基本的概念,导致自己传值总是失败,反正就是子传给父的时候,父窗体就是无法显示想要的数据。自己做的DEMO反而还可以显示,很是奇怪,但我自己也知道问题就是出在父窗体的构造函数中,一直都没把构造函数和实例进行紧密的联系。导致我自己传值总是失败。
在这里我主要有三个WINFORM窗体,第一个是MainParent,第二个是ChildForm,第三个是ThirdForm,MainParen打开ChildForm,ChildForm打开ThirdForm,并且现在我有一实体类,姑且定义为用户信息类(UserInfo)见下图:
首先我在我的 第三个窗体里定义委托,以及委托事件,
而我需要在第2个窗体ChildForm接收第三个窗体触发的事件,然后根据事件,给需要的值进行数据填充。
代码如下:
代码
上面的代码就是在窗体三中定义的委托和事件,以及事件何时触发引起传值。
接着需要在窗体2中获取窗体三中传递过来的值,就必须订阅事件,然后自身进行事件触发后的条件函数引用等。
废话不多说,请见代码:
此时就已经完全产生的子传给父窗体的值。特别需要在窗体2中,激活窗体3实例的时候,就是点击按钮弹出窗口三的时候,必须与事件订阅者是一个实例,否则实例不同,子无法传给先前的父实例,这里是切记需要注意的地方。
private ThirdForm thirdfrm = new ThirdForm("aa");这句和按钮事件中的实例必须是一个,否则无法接收事件。
关于父传给子的值传递相对来说比较简单,什么公有变量,公有静态变量,构造函数传参等也是一种办法。
下载地址:
http://files.cnblogs.com/wanzegui325/WinFormSendValue.rar
在这里我主要有三个WINFORM窗体,第一个是MainParent,第二个是ChildForm,第三个是ThirdForm,MainParen打开ChildForm,ChildForm打开ThirdForm,并且现在我有一实体类,姑且定义为用户信息类(UserInfo)见下图:
首先我在我的 第三个窗体里定义委托,以及委托事件,
而我需要在第2个窗体ChildForm接收第三个窗体触发的事件,然后根据事件,给需要的值进行数据填充。
代码如下:
代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WinFormSendValue { public partial class ThirdForm : Form { public delegate void SetValueSend(UserInfo userinfo);//定义委托 public SetValueSend sendEvent;//声明委托类型的事件 public ThirdForm(string aa) { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { UserInfo model = new UserInfo();//实体类 model.UserName = this.textBox1.Text; model.PassWord = this.textBox2.Text; if (sendEvent != null) { sendEvent(model); } this.Visible = false; } } }
上面的代码就是在窗体三中定义的委托和事件,以及事件何时触发引起传值。
接着需要在窗体2中获取窗体三中传递过来的值,就必须订阅事件,然后自身进行事件触发后的条件函数引用等。
废话不多说,请见代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WinFormSendValue { public partial class ChildForm : Form { private ThirdForm thirdfrm = new ThirdForm("aa"); public ChildForm() { InitializeComponent(); thirdfrm.sendEvent += new ThirdForm.SetValueSend(setvalue);//订阅事件 } public ChildForm(string aa) { InitializeComponent(); } public ChildForm(UserInfo userinfo) { InitializeComponent(); } /// <summary> /// 事件触发的委托函数声明 /// </summary> /// <param name="userinfo"></param> private void setvalue(UserInfo userinfo) { this.textBox1.Text = userinfo.UserName; this.textBox2.Text = userinfo.PassWord; } private void button1_Click(object sender, EventArgs e) { thirdfrm.Show(); } } }
此时就已经完全产生的子传给父窗体的值。特别需要在窗体2中,激活窗体3实例的时候,就是点击按钮弹出窗口三的时候,必须与事件订阅者是一个实例,否则实例不同,子无法传给先前的父实例,这里是切记需要注意的地方。
private ThirdForm thirdfrm = new ThirdForm("aa");这句和按钮事件中的实例必须是一个,否则无法接收事件。
关于父传给子的值传递相对来说比较简单,什么公有变量,公有静态变量,构造函数传参等也是一种办法。
下载地址:
http://files.cnblogs.com/wanzegui325/WinFormSendValue.rar
相关文章推荐
- 在.NET中利用委托实现窗体间通信
- 子窗体与父窗体间的传值--用委托实现
- 使用委托实现窗体之间的传值--事件订阅实现传值
- winform 利用委托实现窗体传值
- 委托实现窗体异步示例
- 在.NET中利用委托实现窗体间通信
- C#中使用委托创建事件实现两个窗体间通信
- c# winfrom 委托实现窗体相互传值
- c# 用委托和事件实现不同窗体间的通讯(一)
- 在.NET中利用委托实现窗体间通信
- 委托事件实现更新窗体
- 转:c#委托事件实现窗体传值通信
- 在 .NET中利用委托实现窗体间通信
- 在.NET中利用委托实现窗体间安全通信
- 图解C#利用委托实现窗体传值
- C#利用委托实现窗体间的值传递 .
- 用委托来实现子窗体操作父窗体中的控件
- 在 .NET中利用委托实现窗体间通信
- 如何用委托与事件实现winfrom窗体之间值传递
- Winform中利用委托实现窗体之间的传值