【www.bbyears.com--WinForm】
首先定义一个继承EventArgs类的类,其中包涵自己要传递的数据,类中的属性都是用来传递数据的:
代码如下 EventArgspublic class FormulaSetEvent:EventArgs
{
public string _name { set; get; }
public string _formula { set; get; }
public int _select { set; get; }
public FormulaSetEvent(string name, string formula,int select)
{
this._select = select;
this._name = name;
this._formula = formula;
}
}
然后定义委托类型,定义委托事件(写在要触发事件的窗体中):
代码如下 //定义委托类型
public delegate void DialogEventHandler(object sender, FormulaSetEvent e);
//定义委托事件
public event DialogEventHandler ReturnDataEvent;
然后开始编辑触发事件:
代码如下 //应用
private void button2_Click(object sender, EventArgs e)
{
if (ReturnDataEvent != null)
{
ReturnDataEvent(this,new FormulaSetEvent(this.comboBox1.Text,this.richTextBox1.Text,select));
}
}
再然后要在主窗体中注册事件:
代码如下 private void button1_Click(object sender, EventArgs e){
Form2 form = new Form2();
form.ReturnDataEvent += new Form2.DialogEventHandler(f2_Event);
form.ShowDialog();
}
上面的f2_Event为事件响应的函数:
代码如下 void f2_Event(object sender,FormulaSetEvent e)
{
this.TextBox1.Text=e._name;
}
在此就可以获取Form2中的值,并且能在Form2不关闭的情况下修改主窗体的内容 属性;
有时在做“应用”这个按钮功能是会用到
特写一小例子,共享之。
所谓观察者,就好比警察抓小偷时放出的眼线,眼线观察小偷,一有行动,立刻反应给警察。
现有FrmMain(警察),FrmChild1,FrmChild2(姑且当作两个小偷吧),一个定义委托和事件的类MiddleModule,它就是观察者。
且看代码:
C# code
MiddleModule:
using System;
using System.Collections.Generic;
using System.Text;
namespace Observer
{
///
/// 定义发布消息的委托
///
/// 发布者
/// 消息
public delegate void Send(object sender, object msg);
///
/// 观察者的中间模块组建
///
public class MiddleModule
{
///
///消息发布的事件
///
public static event Send eventSend;
public static void SendMessage(object sender, object msg)
{
if (eventSend != null)
{
eventSend(sender, msg);
}
}
}
}
namespace WinObserver
{
public partial class FrmMain : Form
{
///
/// 构造方法,在构造主窗体的时候就订阅来自FrmChild1的消息
///
public FrmMain()
{
InitializeComponent();
MiddleModule.eventSend += new Send(MiddleModule_eventSend);
}
///
/// 接收FrmChild1的回传数据
///
///
///
void MiddleModule_eventSend(object sender, object msg)
{
FrmChild1 frmChild1 = sender as FrmChild1;
if (null != frmChild1)
{
this.lblMsg.Text = "FrmChild1的回传数据:"+msg.ToString();
}
}
private void btnShow1_Click(object sender, EventArgs e)
{
FrmChild1 frmChild1 = FrmChild1.CreateInstance();
frmChild1.Show();
}
private void btnShow2_Click(object sender, EventArgs e)
{
FrmChild2 frmChild2 = FrmChild2.CreateInstance();
frmChild2.Show();
}
private void btnSend_Click(object sender, EventArgs e)
{
//由Observer模块传递数据
if (String.IsNullOrEmpty(this.txtMsg.Text))
{
MiddleModule.SendMessage(this, String.Empty);
}
else
{
MiddleModule.SendMessage(this, this.txtMsg.Text);
}
}
}
}
小偷1:
C# code
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Observer;
namespace WinObserver
{
public partial class FrmChild1 : Form
{
private static FrmChild1 frmChild1 = null;
private FrmChild1()
{
InitializeComponent();
MiddleModule.eventSend += new Send(MiddleModule_eventSend);
}
void MiddleModule_eventSend(object sender, object msg)
{
FrmMain frmMain = sender as FrmMain;
if (null != frmMain)
{
this.lblMsg.Text = msg.ToString();
}
}
public static FrmChild1 CreateInstance()
{
if (null == frmChild1)
{
frmChild1 = new FrmChild1();
}
return frmChild1;
}
private void btnSendBack_Click(object sender, EventArgs e)
{
//由Observer模块传递数据
if (String.IsNullOrEmpty(this.txtMsg.Text))
{
MiddleModule.SendMessage(this, String.Empty);
}
else
{
MiddleModule.SendMessage(this, this.txtMsg.Text);
}
}
}
}
小偷2:
代码如下C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Observer;
namespace WinObserver
{
public partial class FrmChild2 : Form
{
private static FrmChild2 frmChild2 = null;
///
/// 接收来自FrmMain传递过来的数据
///
private FrmChild2()
{
InitializeComponent();
MiddleModule.eventSend += new Send(MiddleModule_eventSend);
}
void MiddleModule_eventSend(object sender, object msg)
{
FrmMain frmMain = sender as FrmMain;
if (null != frmMain)
{
this.lblMsg.Text = msg.ToString();
}
}
public static FrmChild2 CreateInstance()
{
if (null == frmChild2)
{
frmChild2 = new FrmChild2();
}
return frmChild2;
}
}
}