场景

委托(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 System.ComponentModel;
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中跨窗体传值为例相关推荐

  1. 一个简单的c++/cli中委托与事件的处理模型

    // EventPractice.cpp: 主项目文件. #include "stdafx.h" using namespace System; delegate void f( ...

  2. C#中委托和事件的区别

    大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法.事件可以被看作一个委托类型的变量,通过事件注册.取消多个委托或方法.本篇分别通过委托和事件执行多个方法,从中体会两者的区别. □ 通过委托 ...

  3. C#中委托、事件和回调的用法说明

    参考链接: C#中的委托和事件 - Part.1 - 技术 - 张子阳的博客 分分钟用上C#中的委托和事件 - 雾中人 - 博客园 C#回调函数的简单讲解与应用例子(最简单讲解,大神绕道)_sajia ...

  4. C#中在定义事件委托时怎样跨窗体传递参数

    场景 C#中委托与事件的使用-以Winform中跨窗体传值为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100150700 ...

  5. [C#]委托和事件(讲解的非常不错)

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  6. C# 中的委托和事件

    引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ...

  7. C# 中的委托和事件(转载)

    C# 中的委托和事件 (今天去因为委托和事件这两个东西把我搞得头疼死了,偶然发现这篇文章,觉得非常不错,就copy过来了!) 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而 ...

  8. C#中的委托和事件 (7)---总结

    在本文中我首先通过一个GreetingPeople的小程序向大家介绍了委托的概念.委托用来做什么,随后又引出了事件,接着对委托与事件所产生的中间代码做了粗略的讲述. 在第二个稍微复杂点的热水器的范例中 ...

  9. 【转】C# 中的委托和事件

    阅读目录 C# 中的委托和事件 引言 将方法作为方法的参数 将方法绑定到委托 事件的由来 事件和委托的编译代码 委托.事件与Observer设计模式 .Net Framework中的委托与事件 总结 ...

最新文章

  1. extjs获取焦点和失去焦点_[NBA夏联]焦点单三连红,NBA夏季联赛同样精彩
  2. EasyUI datagrid : 启用行号、固定列及多级表头后,头部行号位置单元格错位的问题...
  3. 阿里《Java手册》做一个有技术情怀的人
  4. C# 序列化理解 1(转)
  5. 在线文本中插入符号工具
  6. 五分钟回顾 | 2016年智能交通大事件
  7. 微信小程序生成体验版的二维码
  8. 一步一步SharePoint 2007之十九:解决实现注册用户后,自动具备访问网站的权限的问题(1)——配置Provider...
  9. 项目管理技术和工具TT
  10. Photoshop技术学习有感
  11. GMM Kmeans代码示例
  12. 跨境电商运营系统平台及Fecify推荐
  13. 平衡左右脑、加强记忆、提高情商……冥想的这些好处你知道吗?
  14. border-radius 构建规则讲解 及 50% 和 100% 的异同
  15. 计算机考试感受作文,关于考试感受作文5篇
  16. 麒麟桌面操作系统V10 SP1 桌面操作系统软件商店无法打开
  17. 开发直播app中要了解的原理
  18. 利用python Turtle库函数画一个实时钟表
  19. 个人永久性免费-Excel催化剂功能第68波-父子结构表转换之父子关系BOM表拆分篇...
  20. Linux正则表达式简介

热门文章

  1. html获取鼠标按键数,鼠标在IE、Firefox和Opera点击键所对应的数字代码
  2. numpy归一化_使用numpy 高效实现K-Means聚类
  3. ttk python_【转】Python GUI进阶(ttk)—让界面变得更美
  4. mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...
  5. python3.9特性_Python3.9的7个特性
  6. java 发送cookie_Java如何在Servlet中发送cookie?
  7. python dataframe删除指定行_pandas.DataFrame删除/选取含有特定数值的行或列
  8. html+仿百度外卖地址选择,百度外卖选择地址中的地图功能是怎么实现的?
  9. Kaggle比赛源代码和讨论的收集整理
  10. logic回归是一种线性回归