DelegateAndEvent应用之回马枪
2009-08-21 11:54
288 查看
应用Delegate和Event实现函数的回调,在实际的开发中非常有用。它实现的实际上是一种依赖通知的效果。通常可以用在:子窗体信息更新的结果反馈至母窗体;类的属性值和UI控件值依赖时的相互“通知”等。
现通过简单的例子Demo这两种应用场景:
一:类的属性值发生变化时,反馈到和它关联的控件中:
1.建立类 BasicInfo,并为其建立委托和事件
2.建立Form1,并拉出几个TextBox控件。当属性值发生改变时,反馈到相关连的控件
二:子窗体信息更新的结果反馈至母窗体
1.建立子窗体frmChild,建立相应的委托和事件。
2.建立母窗体frmMain:
说明:子窗体更新信息后,触发相应的事件,并关闭;此事件将执行在母窗体中为其指定的回调函数,由于存在参数的传递,从而达到“回马枪”的效果
三:经典的 猫叫,主人醒,老鼠跑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// 编码规范
///
现通过简单的例子Demo这两种应用场景:
一:类的属性值发生变化时,反馈到和它关联的控件中:
1.建立类 BasicInfo,并为其建立委托和事件
namespace DelegateAndEventDemo { ///说明:通常属于哪个类的事件,定义的时候要作为类的成员定义其委托和事件 /// 而回调函数则在调用方进行定义; /// 这样,类的事件触发时,就可以执行调用方的方法,从而实现函数回调。 /// //定义delegate public delegate void ValueChangeEventHandler(object o, EventArgs e); class BasicInfo { //为此类定义一个事件 public event ValueChangeEventHandler onValueChanged; private string id; public string ID { get { return id; } set { id = value; onValueChanged(id, null);//当属性值发生变化时,触发事件 } } } }
2.建立Form1,并拉出几个TextBox控件。当属性值发生改变时,反馈到相关连的控件
namespace DelegateAndEventDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { BasicInfo info = new BasicInfo(); info.onValueChanged += GetChange;//为类的时间定义回调函数 info.ID = txtId.Text; //改变属性值(将触发事件) } //回调函数的定义 public void GetChange(object o,EventArgs e) { string s = o as string; txtName.Text = "Name" + s; } } }
二:子窗体信息更新的结果反馈至母窗体
1.建立子窗体frmChild,建立相应的委托和事件。
namespace DelegateAndEventDemo { public delegate void ChangeValueEventhandler(object o,EventArgs e); public partial class frmChild : Form { public event ChangeValueEventhandler OnValueChanged; public frmChild() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { OnValueChanged(txtValue.Text, null); this.Close(); } } }
2.建立母窗体frmMain:
public partial class frmMain : Form { public frmMain() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { frmChild frm = new frmChild(); frm.OnValueChanged += ChangeValue; frm.Show(); } private void ChangeValue(object o, EventArgs e) { string s = o as string; txtString.Text = s; } }
说明:子窗体更新信息后,触发相应的事件,并关闭;此事件将执行在母窗体中为其指定的回调函数,由于存在参数的传递,从而达到“回马枪”的效果
三:经典的 猫叫,主人醒,老鼠跑
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// 编码规范
///
相关文章推荐
- C# delegate and event
- C# delegate and event 续
- [Note]CLR via C#3-Event and Delegate
- C# delegate and event
- Delegate and event
- 委托和事件之烧开水:Delegate and Event
- event and delegate
- The relation between event and delegate in visual c#
- [原创] C#委托(Delegate)事件(Event)应用详解
- Delegate and Event探索
- C#编程利器之四:委托与事件(Delegate and event) (上)
- C#编程利器之四:委托与事件(Delegate and event) (下)
- Difference betweeen event and delegate
- 委托和事件[delegate and event]_C#
- Callback with event and delegate over .net remoting
- C# 委托(Delegate) 事件(Event)应用详解
- C#编程利器之四:委托与事件(Delegate and event) (下)
- delegate and event
- C#编程利器之四:委托与事件(Delegate and event) (上)
- C# Event 和 Delegate 的简单应用