优化事件实现 SimpleLinkButton

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
 }
}

资源下载链接为: https://pan.quark.cn/s/abbae039bf2a nw.js(原名node-webkit)是一个开源框架,基于Google的Chromium浏览器内核和Node.js环境构建。它允许开发者使用HTML、CSS和JavaScript等Web技术开发跨平台桌面应用,并提供对本地系统资源的访问能力。版本号v0.48.3表明这是该框架的一个特定稳定版本,包含特定的修复和改进。 nw.js的核心优势在于它结合了浏览器的渲染引擎和Node.js的服务器端功能,让开发者能够利用熟悉的Web开发技能来构建桌面应用。通过nw.js,开发者可以将Web应用程序打包成一个.exe文件,使其能够在Windows操作系统上独立运行,无需用户安装额外的浏览器或插件,只需双击即可启动。这种方式为用户提供了类似原生桌面应用的体验。 在nw.js项目中,通常会有一个主HTML文件作为应用的入口点,开发者可以在其中引入JavaScript代码,利用Node.js的API访问本地文件系统、硬件设备等资源。此外,nw.js还支持使用package.json文件来配置应用的元数据、启动脚本和其他设置。 描述中提到的“包含执行命令”可能是指nw.js提供的命令行参数,例如--load-url,可用于指定应用启动时加载的网页URL。这使得开发者可以通过命令行灵活地改变应用的行为,而无需硬编码在应用内部。 此外,描述中提到的“直接修改URL,运行start.bat即可生成app.exe”,表明压缩包中可能包含一个批处理文件(start.bat)。该文件通过一系列命令设置要加载的URL,并最终生成一个名为app.exe的可执行文件。这一过程可能是自动化构建的一部分,帮助开发者快速打包和部署Web应用程序。 压缩包中的文件很可能是nw.js的运行时环境以及与构建和打包Web应用相关的辅
内容概要:本文全面介绍了虚幻引擎4(UE4)的功能、应用场景、学习准备、基础操作、蓝图系统、材质与纹理、灯光与渲染等方面的内容。UE4是一款由Epic Games开发的强大游戏引擎,支持跨平台开发,广泛应用于游戏、虚拟现实、增强现实、建筑设计等领域。文章详细阐述了学习UE4前的硬件和软件准备,包括最低和推荐配置,以及Epic Games账户创建、启动器安装等步骤。接着介绍了UE4的界面组成和基本操作,如视口、内容浏览器、细节面板等。蓝图系统作为UE4的可视化脚本工具,极大降低了编程门槛,通过实例演练展示了蓝图的应用。材质与纹理部分讲解了材质编辑器的使用和纹理导入设置,灯光与渲染部分介绍了不同类型的灯光及其应用,以及后期处理和高质量图片渲染的方法。最后推荐了一些学习资源,包括官方文档、教程网站、论坛社区和书籍。 适合人群:对游戏开发感兴趣、希望学习UE4的初学者和有一定编程基础的研发人员。 使用场景及目标:①掌握UE4的基本操作和界面认知,为后续深入学习打下基础;②通过蓝图系统快速创建游戏逻辑,降低编程门槛;③学会材质与纹理的创建和设置,提升游戏画面的真实感;④掌握灯光与渲染技术,营造逼真的游戏氛围;⑤利用推荐的学习资源,加速UE4的学习进程。 阅读建议:本文内容详尽,涵盖了UE4的各个方面,建议读者按照章节顺序逐步学习,先从基础操作入手,再深入到蓝图、材质、灯光等高级功能。在学习过程中,结合实际项目进行练习,遇到问题时参考官方文档或社区论坛,不断积累经验和技能。
已发布 6/2025 MP4 |视频:h264、1920x1080 |音频:AAC,44.1 KHz 语言:英语 |大小: 5.59 GB |时长: 10h 45m 通过从头开始构建动手实践的 ToDo 应用程序来掌握 React 的基础知识 - 非常适合初学者! 您将学 到什么 构建和部署功能性 ReactJS ToDo 应用程序 学习者将能够使用 ReactJS 设计、编码和运行完整的 ToDo 应用程序,展示核心概念 了解和应用 React 基础知识 学习者将获得 React 基础知识的实践经验,包括 JSX、组件、props、状态 (useState) 和列表 处理用户输入和组件交互 学生将学习如何管理表单输入、触发事件以及处理动态更改,例如添加和删除 有效地组织和构建 React 项目 在课程结束时,您将能够将他们的代码库组织成可重用的组件并维护 要求 不需要编程经验。您将学习您需要了解的一切 描述 您准备好进入现代 Web 开发的世界了吗?对于任何想要学习 ReactJS 的人来说,本课程都是一个完美的起点,ReactJS 是用于构建用户界面的最受欢迎的 JavaScript 库之一。在这个适合初学者的课程中,您将使用 ReactJS 从头开始构建一个完整的 ToDo 应用程序。您不仅会学习 React 的核心概念,还会学习如何应用它们来创建功能齐全的交互式 Web 应用程序。这种基于项目的学习方法可确保您深入和实际地理解每个主题。以下是你将学到的内容:如何设置 React 开发环境创建和组织 React 组件使用 useState 管理状态处理表单输入和事件渲染动态列表和使用 .map() 条件渲染和基本组件逻辑通过组件之间的 props 传递数据了解虚拟 DOM 如何更新 UI配置和改进你的开发工作流程无论你是完全的初学者还是从其他框架转换的人, 本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值