• asp.net控件开发基础(2)


     一个有Onclick事件的button例子:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web.UI;
    using System.ComponentModel;

    namespace ComponentControl
    {
        [DefaultProperty(
    "Text")]
        [ToolboxData(
    "<{0}:MyButton runat=server></{0}:MyButton>")]
        
    public class Ctrl4 : Control, IPostBackEventHandler
        
    {
            
    public event EventHandler Click;//定义事件,EventHandler为系统委托名

            IPostBackEventHandler 成员IPostBackEventHandler 成员
    IPostBackEventHandler 成员

            
    public string Text         //设置属性Text的值
            {
                
    get return ViewState["text"== null ? "Button" : ViewState["text"].ToString(); }
                
    set { ViewState["text"= value; }
            }


            
    protected override void Render(HtmlTextWriter writer)
            
    {
                  writer.AddAttribute(HtmlTextWriterAttribute.Type, 
    "Submit");
                writer.AddAttribute(HtmlTextWriterAttribute.Name, 
    this.UniqueID);  //跟下面一句代码实现同样效果,触发服务器端事件,属性必须是Name,不能为ID
                
    //writer.AddAttribute(HtmlTextWriterAttribute.Onclick, Page.GetPostBackEventReference(this));
                writer.AddAttribute(HtmlTextWriterAttribute.Value, Text);
                writer.RenderBeginTag(HtmlTextWriterTag.Input);
                writer.RenderEndTag();
                
                
    //writer.Write("<INPUT TYPE=submit name=" + this.UniqueID +" Value='Button' />");
            }

        }

    }


    另外一种优化的事件实现
    EventHandlerList 类提供一个简单的委托列表来添加和删除委托,下面来看看更改后的代码,
    AddHandler有两个参数事件对象和添加的委托,在OnClick事件中必须显示将委托转换为EventHandler类型

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web.UI;

    namespace ComponentControl
    {
        
    public class Ctrl5:Control,IPostBackEventHandler
        
    {
            
    // 声明Click事件委托
            private static readonly object obj = new object();

            
    public virtual event EventHandler Click
            
    {
                add 
    {
                    Events.AddHandler(obj, value);
                }

                remove
                
    {
                    Events.RemoveHandler(obj, value);
                }

            }


            
    protected override void Render(HtmlTextWriter writer)
            
    {
                writer.Write(
    "<input type=submit name="+this.UniqueID+" value=Button />");
            }


            IPostBackEventHandler 成员
    IPostBackEventHandler 成员
        }

    }


  • 相关阅读:
    MySQL日志
    MySQL备份与恢复
    MySQL创建数据表并建立主外键关系
    MySQL函数的使用
    MySQL存储过程
    MySQL变量的使用
    MySQL个人学习笔记
    SQL Server CLR 使用 C# 自定义存储过程和触发器
    SQL Server CLR 使用 C# 自定义函数
    LC 918. Maximum Sum Circular Subarray
  • 原文地址:https://www.cnblogs.com/di305449473/p/1245334.html
Copyright © 2020-2023  润新知