zoukankan      html  css  js  c++  java
  • 温故而知新事件

    事件概述

    类或对象可以通过时间向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。

    事件特点:

    发行者确定何时引发事件,订户确定执行何种操作来响应该事件。

    一个事件可以有多个订户。一个订户可以处理来自多个发行者的事件。

    没有订户的时间永远不会引发。

    事件通常用户通知用户操作,如:图形用户界面中的按钮单击或菜单选择操作。

    如果一个事件有多个订户,当引发该事件时,会同步调用多个事件处理程序。(可以使用异步方式调用同步方法)。

    在.NET Framwork类库中,事件是基于EventHandler委托和EventArgs基类的。 

    订阅和取消订阅事件

    1.使用VS IDE订阅事件

    属性→事件→要创建的事件(如Load事件)。

    Visual C#会创建一个空事件处理程序方法,并将其添加到你的代码中。你也可以在“代码”视图中手动添加代码。

    1 private void Form1_Load(object sender, EventArgs e)
    2         {
    3 
    4         }

    还会在项目的Form1.Designer.cs文件的InitializaComponent方法中自动生成订阅该事件所需的代码。如下:

    1 this.Load += new System.EventHandler(this.Form1_Load);

    2.以编程方式订阅事件
    定义一个事件处理程序方法,其签名与该事件的委托签名匹配。

     1 public Form1()
     2         {
     3             InitializeComponent();
     4         }
     5 
     6         private void Form1_Load(object sender, EventArgs e)
     7         {
     8             label2.Text = "加载...";
     9         }
    10         void HandleEvent(object sender, EventArgs a)
    11         {
    12             label1.Text = "使用编程订阅事件!";
    13         }

    使用假发赋值运算符(+=)来为事件附加事件处理程序。

    1 this.Load += new System.EventHandler(this.Form1_Load);
    2             this.Load += new System.EventHandler(this.HandleEvent);

    还可以使用Lambda表达式添加事件处理程序:

    1 public Form1()
    2         {
    3             InitializeComponent();
    4             this.Click += (s, e) =>
    5             {
    6                 MessageBox.Show(
    7                     ((MouseEventArgs)e).Location.ToString());
    8             };
    9         }

    3.使用匿名方法订阅事件

    如果以后不必取消订阅某个事件,则可以使用假发赋值运算符(+=)将匿名方法附加发哦此事件。

    1 this.Load += new System.EventHandler(this.Form1_Load);
    2             //this.Load += new System.EventHandler(this.HandleEvent);
    3             this.Load += new System.EventHandler(delegate(object o, EventArgs e) { label1.Text = "使用匿名方法"; });

    一般不建议使用匿名函数订阅事件。

    取消订阅事件

    使用剪发运算符(-=)取消订阅事件:

    1 this.Load -= new System.EventHandler(this.HandleEvent);

    所有订户都取消订阅事件后,发行者类中的事件实例将设置为null。

  • 相关阅读:
    CentOS修改hosts文件及生效命令
    Elasticsearch处理 空对象问题
    Windows查看某个端口被占用的解决方法
    PHP Fatal error: Uncaught Error: Class ‘\Elasticsearch\Serializers\SmartSerializer‘ not found in /h
    浏览器正常导出文件phpecxel
    ElasticsearchPHP 快速开始
    MySQL为什么选择B+树存储索引
    PHP7.3.0+弃用FILTER_FLAG_SCHEME_REQUIRED的解决办法
    Zoom支持自动生成字幕;SharePlay上线;Safari 更新导致大量bug |WebRTC风向
    日均请求量1.6万亿次背后,DNSPod的秘密国密DoH篇
  • 原文地址:https://www.cnblogs.com/zhangxiaohui/p/2560097.html
Copyright © 2011-2022 走看看