优化事件实现 SimpleLinkButton

本文介绍了一种自定义ASP.NET Web控件SimpleLinkButton的方法,该控件继承自WebControl并实现了IPostBackEventHandler接口。文章详细展示了如何定义Click事件及其实现,通过EventHandlerList提高事件处理效率。

using System;
using System.ComponentModel;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace MSPress.ServerControls {
    [
    DefaultEvent("Click"),
    DefaultProperty("Text")
    ] 
    public class SimpleLinkButton: WebControl, IPostBackEventHandler {
        private static readonly object EventClick = new object();   //创建了一个只读的对象
     
        [
        Bindable(true),
        Category("Behavior"),
        DefaultValue(""),
        Description("The text to display on the link")l
        ]
        public virtual string Text {
            get {
                string s = (string)ViewState["Text"];
                return((s == null) ? String.Empty : s);
            }
            set {
                ViewState["Text"] = value;
            }
        }

        protected override HtmlTextWriterTag TagKey {
            get {
                return HtmlTextWriterTag.A;
            }
        }
       
        [
        Category("Action"),
        Description("Raised when the hyperlink is clicked")
        ]
        public event EventHandler Click {
            add {
                Events.AddHandler(EventClick, value);
            }
            remove {
                Events.RemoveHandler(EventClick, value);
            }
        }
        void IPostBackEventHandler.RaisePostBackEvent(string eventArgument){       
            OnClick(EventArgs.Empty);
        }     
  
 
        protected override void AddAttributesToRender(HtmlTextWriter writer) {
            base.AddAttributesToRender(writer);          
            writer.AddAttribute(HtmlTextWriterAttribute.Href, Page.GetPostBackClientHyperlink(this, String.Empty)); 
        }
        protected virtual void OnClick(EventArgs e) {
            EventHandler clickHandler = (EventHandler)Events[EventClick]; 
            if (clickHandler != null) {
                clickHandler(this, e);
            } 
        }

        protected override void Render(HtmlTextWriter writer) {
            // Ensures that this control is nested in a server form.
            if (Page != null) {
                Page.VerifyRenderingInServerForm(this);
            }
            //base.Render(writer);调用基类Render方法,呈现基类的属性
            base.Render(writer);
        }

        protected override void RenderContents(HtmlTextWriter writer) {
            writer.Write(Text);
        }
    }
}

要理解的

 protected static readonly object EventClick = new object();
public event EventHandler Click{
 add {
  Events.AddHandler(EventClick,value);
 }
 remove {
  Events.RemoveHandler(EventClick,value);
 }
}

  在事件属性结构定义之前,首先需要定义Click事件委托对象。由于每个事件仅创建一次,因此,需要声明为静态和只读的。然后,在属性结构中通过AddHandler、RemoveHandler方法操作事件处理程序委托列表。当页面调用Click事件时,它向控件的EventHandlerList集合中添加或者删除处理程序。由于这种实现方法,在多个事件的声明过程中比普通的实现方法效率高,因此是非常值得推荐的方法。

  另外,在OnClick方法的实现过程中,当用一个事件属性时,必须从EventHandlerList中取回委托,并将其转换成EventHandler的类型。

protected virtual void OnClick(EventArgs e){
 EventHandler clickHandler = (EventHandler)Events[EventClick];
 if(clickHandler != null) {
  clickHandler(this,e);
 }
}

【动态模态分解(DMD)】处理任意数据集进行模态分析研究(Matlab代码实现)内容概要:本文围绕动态模态分解(DMD)技术展开,介绍其在处理任意数据集进行模态分析中的应用,并提供基于Matlab的代码实现方案。文中详细阐述了DMD的基本原理及其在多领域科研问题中的实际应用价值,如航空航天、能源系统、信号处理、无人机控制等,展示了该方法在提取复杂系统动态特征方面的有效性。同时,文档列举了大量相关研究案例和技术实现路径,涵盖机器学习、优化算法、图像处理、路径规划等多个方向,突出DMD作为一种数据驱动分析工具的广泛适用性。; 适合人群:具备一定Matlab编程基础,从事科研工作或工程应用的研究生、科研人员及工程师,尤其适用于从事系统建模、数据分析、信号处理等相关领域的技术人员。; 使用场景及目标:①利用DMD方法对非线性动态系统进行降维与模态提取;②结合具体科研问题(如结构健康监测、飞行器控制、能源系统分析)实现数据驱动建模与分析;③通过提供的Matlab代码快速复现算法并应用于实际数据集。; 阅读建议:建议读者结合文中提供的网盘资源下载完整代码和案例资料,按照目录顺序逐步学习,重点理解DMD算法的核心思想与实现细节,并尝试将其迁移至自身研究领域以提升科研效率。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值