1 控件事件:仅指服务器断事件,不包括客户端事件,事件来此两个方面:a从基类继承而来的,b根据开发需求而创建出的自定义事件

         a从基类继承而来的事件举例

              DataBinding事件,该事件当服务器控件绑定到数据源是发生,对应事件的处理程序是OnDatBinding.

              Disponse事件,该事件当从内存释放服务器控件资源是发生,对应事件的处理程序是OnDisponse,这是服务器控件生命周期的最后阶段.

              Init事件,该事件当服务器控件初始化是发生,对应事件的处理程序是OnInit,init事件是控件发生的第一步.

              Load事件,该事件当服务器控件加载到Page对象之时发生,对应事件的处理程序是OnLoad;UnLoad事件则相反,从对象中卸载时发生.

             PreRender事件,该事件在加载Page对象之后呈现之前发生,对应事件的处理程序是OnPreRender.

       b创建自定义服务器控件事件,IpostBackEventHandler接口用于处理客户端引发的页面回传事件,实现此接口服务器控件可将客户端的提交表单事件对应到服务器端事件上,并且通过事件处理程序完成对该客户端事件的处理. IpostBackDataHandler接口用于检查提交给页面的数据,并确定是否在客户端修改过.

 

      2  实现捕获事件回传过程:

          a 自定义服务器控件类必须实现IpostBackEventHander接口和RaisePostBackEvent方法,实现方法如下:

             public void RaiseBackEventHander(String EventArgument)

            {  //EventArgument表示要传递到事件处理程序的可选事件参数

                 OnClick(EventArgs.Empty);

            }

         b 为控件分配uniqueID,在Render事件中声明,例:

            protected override void Render(HtmlTextWriter output)
           {  //引发回传后,页框架就会搜索发送的内容,并确定发送对象的名称是否与实现IpostBackEventHander的服务器控件uniqueID对应
                output.Write("<INPUT TYPE=submit name="+this.UniqueID+"Value='Click Me' />");
            }

         c 实现事件的属性结构. 树形结构是一种优化的事件实现方式, 使用EventHandlerList类提供一个简单的委托列表,是开发人员能够操作事件处理程序的委托列表例

            public static readony object EventClick=new object();  //定义事件委托对象

            public event EventHandler Click()

           {  //通过AddHandler和RemovHandler事件处理程序的委托列表

                 add{

                        Events.AddHandler(EventClick,value);

                  }

                remove{

                        Events.RemoveHandler(EventClick,value);

                  }

           }//当页面调用Click方法时,他向控件的EventHandlerList集合中添加或者删除处理程序

           实现OnCLick方法:

           public virtual void  OnClick(EventArges e)

           {  //使用时间属性时,必须从EventHandlerList集合中取回委托,并将其转换成EventHandler,同时不要忘了完成RaiseBackHandler方法和render事件.

                 EventHandler    clickEventHandler=(EventHandler)Events[EventClick];

                 if(clickEnevntHandler!=null){

                        clickEventHandler(this,e)}

           }

       

       

posted on 2009-06-07 01:15  落漠  阅读(293)  评论(0编辑  收藏  举报