event & delegate Demo(事件&委托示例)

简介:   1using System;  2using System.ComponentModel;  3using System.Windows.Forms;  4  5namespace WindowsFormsApplication1  6{  7    public partial cla...

 

  1 using  System;
  2 using  System.ComponentModel;
  3 using  System.Windows.Forms;
  4
  5 namespace  WindowsFormsApplication1
  6 {
  7    public partial class Form1 : Form
  8    {
  9        public delegate void ActionEventHandler(object sender, ActionCancelEventArgs ev);//声明一个delegate
 10        public static event ActionEventHandler Action;//声明一个名为Action的事件
 11
 12        string _time = "";
 13
 14        public Form1()
 15        {
 16            InitializeComponent();
 17            Form1.Action += new ActionEventHandler(Form1_Action);//为事件Action增加处理程序(即通过ActionEventHandler这个delegate来调用Form1_Action)
 18        }

 19
 20        private void Form1_Action(object sender, ActionCancelEventArgs ev) //这里的方法签名必须与ActionEventHandler的声明签名相同
 21        {
 22            ev.Cancel = DoAction();//调用DoAction,根据当前时间是否超过30秒,决定是否取消事件(小于30秒取消,反之继续)
 23            if (ev.Cancel) 
 24            {
 25                ev.Message = "当前时间小于30秒,事件被取消"//如果取消,设置ev的Message属性  
 26            }

 27        }

 28
 29        /**//// <summary>
 30        /// 判断当前时间是否超过30秒
 31        /// </summary>
 32        /// <returns>小于30秒,返回true,反之返回false</returns>

 33        private bool DoAction() 
 34        {
 35            bool retVal = false;
 36            DateTime tm = DateTime.Now;
 37
 38            if (tm.Second < 30)
 39            {
 40                _time = "";
 41                retVal = true;
 42            }

 43            else 
 44            {
 45                _time = "事件被触发于 " + DateTime.Now.ToLongTimeString();
 46            }

 47
 48            return retVal;
 49        }

 50
 51        /**//// <summary>
 52        /// 声明一个当前时间的属性
 53        /// </summary>

 54        public string TimeString 
 55        {
 56            get return _time; }
 57        }

 58
 59        protected void OnAction(object sender, ActionCancelEventArgs ev) 
 60        {
 61            if (Action!=null)//如果有人订阅了Action事件
 62            {
 63                Action(sender, ev);//则事件触发
 64            }

 65        }

 66
 67        /**//// <summary>
 68        /// 通过按钮来激发事件
 69        /// </summary>
 70        /// <param name="sender"></param>
 71        /// <param name="e"></param>

 72        private void btnRaise_Click(object sender, EventArgs e)
 73        {
 74            ActionCancelEventArgs cancelEvent = new ActionCancelEventArgs();//生成一个ActionCancelEventArgs的实例
 75            OnAction(this, cancelEvent);//激发事件
 76            if (cancelEvent.Cancel)//如果事件被取消,则显示Message
 77            {
 78                lblInfo.Text = cancelEvent.Message;
 79            }

 80            else//反之显示当前时间
 81            {
 82                lblInfo.Text = this.TimeString;
 83            }

 84        }

 85    }

 86
 87    public class ActionCancelEventArgs: CancelEventArgs 
 88    {
 89        string _msg = "";
 90        
 91        //定义一个Message属性
 92        public string Message 
 93        {
 94            get return _msg; }
 95            set { _msg = value;}
 96        }

 97
 98    }

 99}

100
目录
相关文章
|
4天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
548 206
|
3天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
223 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
751 56
|
6天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1056 157
|
4天前
|
存储 Linux iOS开发
最新学习教程,电脑剪贴板不够用!这几个方法教你更多复制粘贴超高效方法,并附上几个扩展工具供你学习
最新学习教程,电脑剪贴板不够用!这几个方法教你更多复制粘贴超高效方法,并附上几个扩展工具供你学习
218 136
下一篇
oss云网关配置