失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C#中委托与事件的使用-以Winform中跨窗体传值为例

C#中委托与事件的使用-以Winform中跨窗体传值为例

时间:2019-10-02 18:51:56

相关推荐

C#中委托与事件的使用-以Winform中跨窗体传值为例

场景

委托(Delegate)

委托是对存有某个方法的引用的一种引用类型变量。

委托特别用于实现事件和回调方法。

声明委托

public delegate int MyDelegate (string s);

实例化委托

声明了委托类型,委托对象必须使用new关键字来创建,且与一个特定的方法相关。

当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。例如:

public delegate void printString(string s);...printString ps1 = new printString(WriteToScreen);

示例代码

using System;delegate int NumberChanger(int n);namespace DelegateAppl{class TestDelegate{static int num = 10;public static int AddNum(int p){num += p;return num;}public static int MultNum(int q){num *= q;return num;}public static int getNum(){return num;}static void Main(string[] args){// 创建委托实例NumberChanger nc1 = new NumberChanger(AddNum);NumberChanger nc2 = new NumberChanger(MultNum);// 使用委托对象调用方法nc1(25);Console.WriteLine("Value of Num: {0}", getNum());nc2(5);Console.WriteLine("Value of Num: {0}", getNum());Console.ReadKey();}}}

事件

事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。

发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。

订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

声明事件

在类的内部声明事件吗,首先必须先声明该事件的委托类型。

public delegate void BoilerLogHandler(string status);

然后声明事件本身。

public event BoilerLogHandler BoilerEventLog;

跨窗体传值示例

效果

实现

首先在弹窗的窗体CurveCompare中声明委托

public delegate void ChangeTextDelegete(string s);

然后基于此委托定义事件

public static event ChangeTextDelegete changeBoxTextEvent;

然后是按钮的具体的点击事件中的处理

private void button1_Click(object sender, EventArgs e){string aa = "hello";if(changeBoxTextEvent != null){changeBoxTextEvent(aa);}}

完整弹窗窗体代码

using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace ZedGraphTest{public partial class CurveCompare : Form{//委托的定义public delegate void ChangeTextDelegete(string s);//事件声明public static event ChangeTextDelegete changeBoxTextEvent;public CurveCompare(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string aa = "hello";if(changeBoxTextEvent != null){changeBoxTextEvent(aa);}}}}

然后再到要改变值的窗体中。

在其初始化方法中

CurveCompare.changeBoxTextEvent += new CurveCompare.ChangeTextDelegete(changeText);

然后编写改变值的方法

public void changeText(string s){this.textBox1.Text = s;}

Form1完整示例代码

public partial class Form1 : Form{public Form1(){InitializeComponent();CurveCompare.changeBoxTextEvent += new CurveCompare.ChangeTextDelegete(changeText);}public void changeText(string s){this.textBox1.Text = s;}

如果觉得《C#中委托与事件的使用-以Winform中跨窗体传值为例》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。