简单ToolBar工具条控件。
感谢JYK的指点。
本文是参考JYK
给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler 
以及seyon
自定义控件学习笔记(5):事件委托列表的使用 
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
namespace Comm.UI
{
    [ToolboxData("<{0}:ToolBar runat=server></{0}:ToolBar>")]
    public class ToolBar : WebControl, INamingContainer
    {
        #region 声明
        private Panel pnlFrame = new Panel();    //承载其它控件的容器Panel控件
        private System.Web.UI.WebControls.Button _btnSave = new Button();
        private System.Web.UI.WebControls.Button _btnCancel = new Button();
        #endregion
        #region 界面
        /**/
        /// <summary>
        /// 由 ASP.NET 页面框架调用,以通知使用基于合成的实现的服务器控件
        /// 创建它们包含的任何子控件,以便为回发或呈现做准备。 
        /// </summary>
        protected override void CreateChildControls()
        {
            //从当前服务器控件的 ControlCollection 对象中移除所有控件。 
            Controls.Clear();
            CreateControlHierarchy();
            //删除服务器控件的所有子控件的视图状态信息。 
            ClearChildViewState();
        }
        /**/
        /// <summary>
        /// 创建并添加子控件
        /// </summary>
        protected virtual void CreateControlHierarchy()
        {
            //1.写一些关于控件添加或者与控件有关属性预设值的代码
            /**/
            /**/
            this._btnCancel.ID = "Cancel";
            this._btnCancel.CommandName = "Cancel";
            this._btnCancel.Text = "Cancel";
            this._btnSave.ID = "Save";
            this._btnSave.CommandName = "Save";
            this._btnSave.Text = "Save";
            //给按钮添加内部事件            
            _btnSave.Click += new EventHandler(btn_Click);
            _btnCancel.Click += new EventHandler(btn_Click);
            //2.将控件添加进当前正在设计的控件
            this.Controls.Add(_btnSave);
            this.Controls.Add(_btnCancel);
            this.Controls.Add(pnlFrame);
        }
#endregion
        #region 内部事件
        void btn_Click(object sender, EventArgs e)
        {
            //调用外部事件
            Button btn = (Button)sender;
            //TestClick(sender, e);
            switch (btn.ID.ToLower())
            {
                case "save":
                    //if (SaveClick != null) SaveClick(sender, e);
                    OnSaveClick(sender, e);
                    break;
                case "cancel":
                    OnCancelClick(sender, e);
                    break;
            }
        }
        #endregion
        #region Click Event
        public delegate void SaveEventHandler(object sender, EventArgs e);
        public delegate void CancelEventHandler(object sender, EventArgs e);
        protected static readonly object EventSaveClick = new object();
protected static readonly object EventCancelClick = new object();
  
        public event SaveEventHandler SaveClick
        {
            add
            {
                Events.AddHandler(EventSaveClick, value);
            }
            remove
            {
                Events.RemoveHandler(EventSaveClick, value);
            }
        }
        public event CancelEventHandler CancelClick
        {
            add
            {
                Events.AddHandler(EventCancelClick, value);
            }
            remove
            {
                Events.RemoveHandler(EventCancelClick, value);
            }
        }
        #endregion
        #region MyRegion
        protected void OnSaveClick(object sender, EventArgs e)
        {
            SaveEventHandler saveE = (SaveEventHandler)base.Events[EventSaveClick];
            if (saveE != null)
            {
                saveE(sender, e);
            }
        }
        protected void OnCancelClick(object sender, EventArgs e)
        {
            CancelEventHandler dd = (CancelEventHandler)base.Events[EventCancelClick];
            if (dd != null)
            {
                dd(sender, e);
            }
        }
#endregion
        #region 将此控件呈现给指定的输出参数
        /// <summary> 
        /// 将此控件呈现给指定的输出参数。
        /// </summary>
        /// <param name="output"> 要写出到的 HTML 编写器 </param>
        protected override void Render(HtmlTextWriter output)
        {
            base.Render(output);
            output.Write(" ");
           
            //this._btnSave.RenderControl(output);
            //this._btnCancel.RenderControl(output);
        }
        #endregion
                
    }
}
 
                    
                
 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号