立博名家

简单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("&nbsp;");
          
            //this._btnSave.RenderControl(output);
            //this._btnCancel.RenderControl(output);

        }
        #endregion
               
    }
}

posted on 2008-07-15 11:05  大李  阅读(340)  评论(2)    收藏  举报

导航

立博名家