zoukankan      html  css  js  c++  java
  • 委托事件的实际运用 itprobie

    1>事件在try catch中的运用

    在多层架构中try catch事件类似于冒泡,如果不对代码做任何处理,无论哪一层发生异常,都会在最顶层的ul层显示出异常信息。所以个人观点,异常的捕获工作最好在ul层。这样所有层级报的异常都可以被捕获到,因为错误会像气泡一样最终会在显示层暴露出来。在每次设计到数据库的时候捕获异常,这样每个页面的数据操作都会被try catch包裹,有没有一种更好得方法,让代码更简洁。答案是肯定的。将控件事件包裹起来,重新申明一个事件,在该事件中调用控件的事件,并且捕获异常。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 
     8 using System.Reflection;
     9 
    10 public partial class _Default : System.Web.UI.Page
    11 {
    12     protected void Page_Load(object sender, EventArgs e)
    13     {
    14         btn.Click += new EventHandlerWrap(btn_Click);
    15     }
    16 
    17     protected void btn_Click(object sender, EventArgs e)
    18     {
    19         lbTime.Text = DateTime.Now.ToString();
    20     }
    21 }
    22 public class EventHandlerWrap
    23 {
    24     private EventHandler handler;
    25     private EventHandler Handler;
    26     public EventHandlerWrap(EventHandler handler)
    27     {
    28         this.handler = handler;
    29         Handler = InVoke;
    30     }
    31 
    32     public static implicit operator EventHandler(EventHandlerWrap wrap)
    33     {
    34         return wrap.Handler;
    35     }
    36 
    37     private void InVoke(object sender, EventArgs e)
    38     {
    39         try
    40         {
    41             this.handler(sender, e);
    42         }
    43         catch (Exception ex)
    44         {
    45             LogError(ex.Message);
    46         }
    47     }
    48 
    49     private void LogError(string errorMsg) { }
    50 }

     2>事件在用户控件中运用

    项目中会设计到报表的流程流转,用到了公司自己研发的工作流,该工作流的功能关联了报表的删除以及状态的显示,所以不同的报表都会添加该工作流,这会导致一个问题的出现,每个页面都必须添加工作流,实现删除功能和状态显示,重复的工作就出现了,所以最总的选择是将工作流的操作和状态封装到自定义空间中。状态的显示可以从工作流实例中通过id获取,但是报表的删除则需要知道具体的表,所以必须把删除操作放在页面,解决的方案是在用户控件中申明一个事件,将删除的操作委托到具体的每个表报的页面中。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 
     8 public partial class UserControls_WorkFlow : System.Web.UI.Page
     9 {
    10     public EventHandler Delete;
    11     protected void Page_Load(object sender, EventArgs e)
    12     {
    13 
    14     }
    15     protected void lbnDel_Click(object sender, EventArgs e)
    16     {
    17         if (Delete != null)
    18             Delete(sender, e);
    19     }
    20 }
  • 相关阅读:
    深入理解JVM内幕:从基本结构到Java 7新特性
    通过Java反射做实体查询
    Hadoop教程(一)
    很不错的js特效
    java utf8字符 导出csv 文件的乱码问题。
    spring MVC使用Interceptor做用户登录判断
    Bootstrap--全局css样式之图片
    Bootstrap-全局css样式之按钮
    Bootstrap--全局css样式之表单
    Bootstarp--全局CSS样式之表格
  • 原文地址:https://www.cnblogs.com/guohu/p/2696255.html
Copyright © 2011-2022 走看看