代码如下[Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public String ButtonControlID
        {
            get
            {
                String s = (String)ViewState["ButtonControlID"];
                return ((s == null) ? String.Empty : s);
            }            set
            {
                ViewState["ButtonControlID"] = value;
            }
        }
        
        protected virtual Button GetButton()
        {
            if (string.IsNullOrEmpty(this.ButtonControlID))
                throw new HttpException("缺少ButtonControlID属性!");            Button btn=this.FindControl(this.ButtonControlID) as Button;            if (btn==null)
                throw new HttpException ("缺少控制控件!");
            return btn;
        }        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);            if (this.Enabled)
            {
                Button btn = GetButton();
                btn.Click+=new System.EventHandler(btn_Click);            }
        }
        public void btn_Click(object sender, EventArgs e)
        {
        } 
这么做是否可以???或者按此思路是否可行???

解决方案 »

  1.   

    如果要绑定事件,应该在LoadComplete事件执行完毕之前就绑定。当页面回发处理时,在LoadComplete执行完就要开始触发事件了。如果在PreRender才绑定事件,永远也不会触发。
      

  2.   

    你这个应该属于复合控件。
    应该继承WebControl, INamingContainer
    然后重写CreateChildControls(),在里面生成控件,
    比如: #region 生成控件
            protected override void CreateChildControls()
            {
                this.Controls.Clear();
                _btnChangePage = new Button();
                _btnChangePage.ID = "btnChangePage";
                _btnChangePage.Click += new EventHandler(BtnChangePage_Click);
                _lblCurrentPage = new Label();
                _lblCurrentPage.ID = "lblCurrentPage";
                _lblPageCount = new Label();
                _lblPageCount.ID = "lblPageCount";
                _lblRecodeCount = new Label();
                _lblRecodeCount.ID = "lblRecodeCount";
                _lnkbtnFrist = new LinkButton();
                _lnkbtnFrist.ID = "lnkbtnFrist";
                _lnkbtnFrist.Click += new EventHandler(lnkbtnFrist_Click);
                _lnkbtnLast = new LinkButton();
                _lnkbtnLast.ID = "lnkbtnLast";
                _lnkbtnLast.Click += new EventHandler(lnkbtnLast_Click);
                _lnkbtnNext = new LinkButton();
                _lnkbtnNext.ID = "lnkbtnNext";
                _lnkbtnNext.Click += new EventHandler(lnkbtnNext_Click);
                _lnkbtnPre = new LinkButton();
                _lnkbtnPre.ID = "lnkbtnPre";
                _lnkbtnPre.Click += new EventHandler(lnkbtnPre_Click);
                _page_0 = new LinkButton();
                _page_0.ID = "_page_0";
                _page_0.Click += new EventHandler(CurrentPage_Click);
                _page_1 = new LinkButton();
                _page_1.ID = "_page_1";
                _page_1.Click += new EventHandler(CurrentPage_Click);
                _page_2 = new LinkButton();
                _page_2.ID = "_page_2";
                _page_2.Click += new EventHandler(CurrentPage_Click);
                _page_3 = new LinkButton();
                _page_3.ID = "_page_3";
                _page_3.Click += new EventHandler(CurrentPage_Click);
                _page_4 = new LinkButton();
                _page_4.ID = "_page_4";
                _page_4.Click += new EventHandler(CurrentPage_Click);
                _page_5 = new LinkButton();
                _page_5.ID = "_page_5";
                _page_5.Click += new EventHandler(CurrentPage_Click);
                _page_6 = new LinkButton();
                _page_6.ID = "_page_6";
                _page_6.Click += new EventHandler(CurrentPage_Click);
                _page_7 = new LinkButton();
                _page_7.ID = "_page_7";
                _page_7.Click += new EventHandler(CurrentPage_Click);
                _page_8 = new LinkButton();
                _page_8.ID = "_page_8";
                _page_8.Click += new EventHandler(CurrentPage_Click);
                _page_9 = new LinkButton();
                _page_9.ID = "_page_9";
                _page_9.Click += new EventHandler(CurrentPage_Click);
                _txtPageIndex = new TextBox();
                _txtPageIndex.ID = "txtPageIndex";
                _lblPageSize = new Label();
                _lblPageSize.ID = "lblPageSize";
                this.Controls.Add(_page_0);
                this.Controls.Add(_page_1);
                this.Controls.Add(_page_2);
                this.Controls.Add(_page_3);
                this.Controls.Add(_page_4);
                this.Controls.Add(_page_5);
                this.Controls.Add(_page_6);
                this.Controls.Add(_page_7);
                this.Controls.Add(_page_8);
                this.Controls.Add(_page_9);
                this.Controls.Add(_btnChangePage);
                this.Controls.Add(_lblCurrentPage);
                this.Controls.Add(_lblPageCount);
                this.Controls.Add(_lblRecodeCount);
                this.Controls.Add(_lnkbtnFrist);
                this.Controls.Add(_lnkbtnLast);
                this.Controls.Add(_lnkbtnNext);
                this.Controls.Add(_lnkbtnPre);
                this.Controls.Add(_txtPageIndex);
                base.CreateChildControls();
                ChildControlsCreated = true; //指示控件已经生成,避免多次重复生成控件
            }
            #endregion
      

  3.   

    如果属性用到里面的子控件,
    则需要判断是否已经生成该控件,比如:
     [Category("Appearance"), Description("设置跳转按钮的文本"),
          DefaultValue(":"), Bindable(true)]
            public virtual string ButtonText
            {
                get
                {
                    EnsureChildControls();//判断控件是否已经生成,如果未生成,则调用CreateChildControls生成控件再使用
                    return _btnChangePage.Text.Trim() != "" ? _btnChangePage.Text.Trim() : "GO";
                }
                set
                {
                    EnsureChildControls();
                    _btnChangePage.Text = value;
                }
            }