自定义CancelEventArgs类,封装事件参数信息,实现e.Cancle=true取消机制。

简介: 参考文章:http://blog.csdn.net/lastinglate/article/details/5753113 如果您正在设计可取消的事件,请使用CancelEventArgs(而非是EventArgs)作为事件数据对象e的基类。

参考文章:http://blog.csdn.net/lastinglate/article/details/5753113

如果您正在设计可取消的事件,请使用CancelEventArgs(而非是EventArgs)作为事件数据对象e的基类。

 使用场景:订阅者可以通过e.Cancle来控制发布者引发事件的方法是否被执行!类似窗体的Form_Closing事件机制。

CancelEventArgsDemo

 顺便有关静态事件链的实现,可以参考:http://www.cnblogs.com/wangiqngpei557/archive/2011/05/19/2051044.html

 /1.自定义EventArgs类,封装事件参数信息  

     public  class ActionCancelEventArgs:System.ComponentModel.CancelEventArgs  
    {  
         private  string message;  
         public ActionCancelEventArgs() :  this( false) { }  
         public ActionCancelEventArgs( bool cancel) :  this( false, String.Empty) { }  
         public ActionCancelEventArgs( bool cancel,  string message) :  base(cancel) {  
             this.message = message;  
        }  
         public  string Message {  getset; }  
    }  

[c-sharp] view plaincopyprint?
// 2.定义委托  
        public  delegate  void ActionEventHandler( object sender, ActionCancelEventArgs ev);  
        // 3.声明事件(用到委托类型)  
        public  static  event ActionEventHandler Action;  
         // 4.定义事件处理函数  
        protected  void OnAction( object sender, ActionCancelEventArgs ev)  
       {  
            if (Action !=  null)  
           {  
               Action(sender, ev);  
           }  
       }  

// 注册事件处理程序  
public  class BusEntity  
    {  
         string time = String.Empty;  
         public BusEntity() {  
             // 将事件处理程序添加到事件  
            Form1.Action +=  new Form1.ActionEventHandler(Form1_Action);  
        }  
         private  void Form1_Action( object sender, ActionCancelEventArgs e) {  
            e.Cancel = !DoActions();  
             if (e.Cancel)  
            {  
                e.Message =  " wasn't the right time. ";  
            }  
        }  
         private  bool DoActions() {  
             bool retVal =  false;  
            DateTime tm = DateTime.Now;  
             if (tm.Second< 30)  
            {  
                time =  " The time is  "+DateTime.Now.ToLongTimeString();  
                retVal =  true;  
            }  
             else  
            {  
                time =  "";  
            }  
             return retVal;  
        }  
         public  string TimeString {  
             get {  return time; }  
        }  
    }  

[c-sharp] view plaincopyprint?
private  void btnRaise_Click( object sender, EventArgs e)  
      {  
          ActionCancelEventArgs cancelEvent =  new ActionCancelEventArgs();  
          OnAction( this, cancelEvent);  
          //抛出事件后,将根据询问订阅者是否取消事件的接受e.Cancle=False/True,来执行后续的代码。
           if (cancelEvent.Cancel)  
          {  
              lblInfo.Text = cancelEvent.Message;  
          }  
           else  
          {  
              lblInfo.Text = busEntity.TimeString;  
          }  
      }  
目录
相关文章
|
4月前
|
JavaScript 前端开发 Java
v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例
这篇文章详细阐述了Vue中`v-if`和`v-show`指令的共同点、区别、使用场景以及它们在组件和普通元素上附属时的不同表现,并通过示例展示了状态改变时对钩子函数调用的影响。
v-if和v-show的区别?使用场景?v-if状态改变调用钩子函数的示例
|
7月前
|
JavaScript 前端开发 Java
若依框架---选中某值 其他值自动回调填充
若依框架---选中某值 其他值自动回调填充
218 0
|
7月前
|
小程序
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
小程序封装组件简单案例,所有小程序适用(传入参数、外抛事件、传入样式)
100 0
[虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。
本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。
98 0
|
Java Spring
任何 bean 初始化回调前自定义逻辑
任何 bean 初始化回调前自定义逻辑
|
Java
CheerpJ调用的两种方式
CheerpJ调用的两种方式
254 0
使用接口来统一控件的取值、赋值和初始化
      这里说的控件主要指的是文本框、下拉列表框这一类的控件,用户使用这些控件输入数据,然后我们需要提取这些数据进行处理。但是不同的控件有不同的取值方式,比如文本框要用Text,下拉列表框是SelectedValue (当然还有其他的方法),CheckBoxList也是SelectedValue,但是这个只能获取第一个选项,如果是选择了多个选项,他只能返回第一个被选中的选项。
852 0