event & delegate Demo(事件&委托示例)
时间:2022-04-23
本文章向大家介绍event & delegate Demo(事件&委托示例),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);//声明一个delegate
public static event ActionEventHandler Action;//声明一个名为Action的事件
string _time = "";
public Form1()
{
InitializeComponent();
Form1.Action += new ActionEventHandler(Form1_Action);//为事件Action增加处理程序(即通过ActionEventHandler这个delegate来调用Form1_Action)
}
private void Form1_Action(object sender, ActionCancelEventArgs ev) //这里的方法签名必须与ActionEventHandler的声明签名相同
{
ev.Cancel = DoAction();//调用DoAction,根据当前时间是否超过30秒,决定是否取消事件(小于30秒取消,反之继续)
if (ev.Cancel)
{
ev.Message = "当前时间小于30秒,事件被取消"; //如果取消,设置ev的Message属性
}
}
/// <summary>
/// 判断当前时间是否超过30秒
/// </summary>
/// <returns>小于30秒,返回true,反之返回false</returns>
private bool DoAction()
{
bool retVal = false;
DateTime tm = DateTime.Now;
if (tm.Second < 30)
{
_time = "";
retVal = true;
}
else
{
_time = "事件被触发于 " + DateTime.Now.ToLongTimeString();
}
return retVal;
}
/// <summary>
/// 声明一个当前时间的属性
/// </summary>
public string TimeString
{
get { return _time; }
}
protected void OnAction(object sender, ActionCancelEventArgs ev)
{
if (Action!=null)//如果有人订阅了Action事件
{
Action(sender, ev);//则事件触发
}
}
/// <summary>
/// 通过按钮来激发事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRaise_Click(object sender, EventArgs e)
{
ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();//生成一个ActionCancelEventArgs的实例
OnAction(this, cancelEvent);//激发事件
if (cancelEvent.Cancel)//如果事件被取消,则显示Message
{
lblInfo.Text = cancelEvent.Message;
}
else//反之显示当前时间
{
lblInfo.Text = this.TimeString;
}
}
}
public class ActionCancelEventArgs: CancelEventArgs
{
string _msg = "";
//定义一个Message属性
public string Message
{
get { return _msg; }
set { _msg = value;}
}
}
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android辅助权限的介绍和配置完整记录
- Redis基础——剖析基础数据结构及其用法
- SwipeRefreshLayout+RecyclerView实现上拉刷新和下拉刷新功能
- 二值分析 | OpenCV + skimage如何提取中心线
- 详解OpenVINO 模型库中的人脸检测模型
- Tensorflow的妙用
- 终端抓包神器 | tcpdump参数解析及使用
- GoLang 中发送 email 邮件
- 漫画算法题:两数之和与三数之和
- 推荐系统与深度学习(十七)——DIN模型原理
- 可视化教程开启BERT之旅
- pandas中apply与map的异同
- 终端下双重过滤筛选内容
- scrapy-redis分布式爬虫
- HTML5新增全局属性