首先定义一个继承EventArgs类的类,其中包涵自己要传递的数据,类中的属性都是用来传递数据的:
代码如下 | 复制代码 |
EventArgs public 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 using System; namespace Observer public static void SendMessage(object sender, object msg)
|
小偷1:
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 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 namespace WinObserver /// void MiddleModule_eventSend(object sender, object msg) public static FrmChild2 CreateInstance() |