C#事件机制(记住流程)

转自:http://jimmyloveforever.blog.163.com/blog/static/119775247200951303935836/

1,C#事件机制是基于委托实现的,因此要首先定义一个委托EventHandler

                       public delegate void EventHandler(object from , myEventArgs e) 

  System.EventArgs是包含事件数据的类的基类,在代码中可直接使用EventArgs类。
myEventArgs类派生于EventArgs类,实现自定义事件数据的功能。这里from表示发生事件的对象。 
2,定义事件格式为:

           event 事件的委托名 事件名 

如事件TextOut定义: 
     public event EventHandler TextOut; 
3,事件的激活一般写成: 
        if (TextOut != null) 
                   TextOut(this,new EventArgs()); 
 检查TextOut事件有没有被订阅,如不为null,则表示有用户订阅。订阅事件的是 
TestApp类,首先实例化EventSource,然后订阅事件: 
evsrc.TextOut += new  EventSource.EventHandler(CatchEvent); 
也可以取消订阅: 
evsrc.TextOut -= new  EventSource.EventHandler(CatchEvent); 

View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;// 定义事件包含数据 
public class MyEventArgs : EventArgs
{private string StrText;public MyEventArgs(string StrText){this.StrText = StrText;}public string GetStrText{get{return StrText;}}
}
// 发布事件的类 
class EventSource
{MyEventArgs EvArgs = new MyEventArgs("触发事件");// 定义委托 public delegate void EventHandler(object sender, MyEventArgs e);// 定义事件 public event EventHandler TextOut;// 激活事件的方法 public void TriggerEvent(){if (TextOut == null)TextOut(this, EvArgs);}
} 
// 订阅事件的类 
class TestApp
{public static void Main(){EventSource evsrc = new EventSource();// 订阅事件 evsrc.TextOut += new EventSource.EventHandler(CatchEvent);// 触发事件 
        evsrc.TriggerEvent();Console.WriteLine("------");// 取消订阅事件 evsrc.TextOut -= new EventSource.EventHandler(CatchEvent);// 触发事件 
        evsrc.TriggerEvent();Console.WriteLine("------");  // 事件订阅已取消,什么也不执行 TestApp theApp = new TestApp();evsrc.TextOut += new EventSource.EventHandler(theApp.InstanceCatch);evsrc.TriggerEvent();Console.WriteLine("------");}// 处理事件的静态方法 public static void CatchEvent(object from, MyEventArgs e){Console.WriteLine("CatchEvent:{0}", e.GetStrText);}// 处理事件的方法 public void InstanceCatch(object from, MyEventArgs e){Console.WriteLine("InstanceCatch:{0},e.GetStrText");}
}

 

转载于:https://www.cnblogs.com/anbylau2130/archive/2013/02/21/2920687.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql-5.7.13-winx64如何安装_mysql 5.7.13 winx64安装配置方法图文教程

针对之前安装mysql的笔记进行了总结,分享给大家。1.下载根据电脑配置来选,我选了 windows(x86,64-bit),ZIP Archive这个,点击Download,页面跳转到如下图点击最下面的No thanks,just start my download,开始下载。我的mysql安装路径是D:\Mysql…

Android Studio 安装配置问题总结

之前一直都是使用Eclipse写Android的,但一直都有听说Android Studio是一个更好的用于开发Android的软件,之前其实也有保存过一些别人写的安装和配置Android Studio的一些教程,在这里也列出来:Android Studio 入门指南;…

说说mysql_说说MySQL权限 - andyqian的个人空间 - OSCHINA - 中文开源技术交流社区

本文首发于个人微信公众号《andyqian》,期待你的关注~前言今天继续MySQL系列文章,讲讲MySQL权限相关的内容。我们都知道,在写系统的时候,都会有权限相关的服务,以达到权限控制的目的。以最简单的权限菜单为例&#xff…

2015 总结 2016 展望

2015年过去了,2016年开始了。2015 总结 回首2015,最大的变化就是从本科到研究生,上半年本科毕业了,下半年则是继续读研,当然还是在本校读研,学院也还是本学院,至于专业还是有所改变了&#xff…

mysql5.7安装差异_mysql5.7和mysql5.6同在CentOS7.4安装差异对比之5.7.18

rpm -qa|grep mariadb // 查询出来已安装的mariadbrpm -e --nodeps 文件名 // 卸载mariadb,文件名为上述命令查询出来的文件yum -y install gcc gcc-c ncurses ncurses-devel cmake bison5.7/5.7解压改名chmod -R 755 mysql/chown -R lbd.lbd mysql/lbd用户默认已经…

关于Android回调的理解

现在学习Android的过程中,一个一直没有理解好的点就是回调了,虽然实际上一直都在使用,比如最常见的就是一个Button,设置点击事件,即setOnClickListener,这就是一个接口,然后必须要实现onClick方法&#xff…

mysql格式分隔符row_MySQLRow格式Binlog的解析(1)

用MySQL 行格式的复制的Slave经常会遇到复制出错1062和1032 错误,一般是镜像异常宕机导致主从复制数据不一致所致,但是有些库本身很大,重建成本很大,并且这些库的数据一致性用户可能都不是太关心的,所以之前的处理办法…

[机器学习笔记] Note1--机器学习简介

阅读本文大约需要 2 分钟 本文结构: 什么是机器学习监督学习(Supervised Learning)非监督学习(Unsupervised Learning)课程小结 这是学习 Andrew Ng 在 Coursea 上的机器学习课程所做的笔记。 什么是机器学习 对于机器学习,并没有一个一致认同的定义…

cellet 的相关线程

cellet启动了两个进程,分别是cellet-resource和cellet进程,这两个进程分别启动了一系列的线程: cellet-resource: StartExecutorReceiver ResourceInfoSender ExecutorControlReceiver 这个进程启动上述线程之后就会监控,是否其子…

mysql执行过程五步_简单五步教你搭建MySQL主从复制

环境主机:172.17.0.2从机:172.17.0.3环境:CentOS7MySQL:5.6.38目标:实现主机172.17.0.2到从机172.17.0.3基于Binlog的主从复制目前MySQL提供两种方式主从复制:基于Binlog(我们此篇就是基于Binlog的主从复制…

[机器学习笔记] Note2--单变量线性回归

继续是机器学习课程的笔记,这节介绍的是单变量线性回归算法,线性回归算法也是一个比较基础的算法。 模型表达 首先是以房屋交易问题为例,假设我们回归问题的训练集如下表所示: Size in feet2feet2(x)Price($) in 1000’s (y)21…

css格式化文本

选择字体 font-family: "Times New Roman", Times, serif; 注意:字体名称中包含多个单词要用("")括起来。 字体颜色 color:#cccccc(16进制) color: rgb(0%, 100%, 0%) 或者 color: rbg(0, 255, 0) rgb颜色,百分数表示0-2…

[线性代数]Note 1--方程组的几何解释

这是记录麻省理工学院公开课:线性代数的笔记,网址是麻省理工公开课:线性代数 第一节课说的是有关方程组的几何解释。网址是方程组的几何解释 首先是介绍方程组的几何解释,提出可以用矩阵表示,然后矩阵表示有两种表达方…

linux打印mysql堆栈_第25问:MySQL 崩溃了,打印了一些堆栈信息,怎么读?

问题在 09 问中,我们开启了 coredump 功能,在 MySQL 崩溃时获得了有用的 coredump 信息。那如果没开启 coredump,仅有 error log 中的堆栈信息,我们如何分析有效的信息?实验我们沿用 09 问中的 MySQL 崩溃的场景&#…

winform中treeview控件实现部分节点显示checkbox

用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示checkbox哪些不显示,可是winform中的treeview只提供一个ShowCheckBoxes 属性,要么全部节点显示checkbox,要不全部不显示,而指定节点没…

[机器学习笔记] Note3--多变量线性回归

继续是机器学习课程的笔记,这节课介绍的是多变量的线性回归。 多变量线性回归 多维特征 上节课介绍的是单变量的线性回归,这节课则是进一步介绍多变量的线性回归方法。 现在假设在房屋问题中增加更多的特征,例如房间数,楼层等…