我将一个textbox和一个img组合自定义成了一个复合控件;
using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;namespace CustomControls
{   
    public class CalenderTextBox:CompositeControl
    {
        private Image imgeCalendar;
        private TextBox txtCalendar;
        private string _textCalendarID;        public string Text
        {
            get
            {
                EnsureChildControls();
                return txtCalendar.Text;
            }
            set
            {
                EnsureChildControls();
                txtCalendar.Text = value;
            }
        }        public string CssClass
        {
            get
            {
                EnsureChildControls();
                return txtCalendar.CssClass;
            }
            set
            {
                EnsureChildControls();
                txtCalendar.CssClass = value;
            }
        }        public string ID
        {
            get
            {
                EnsureChildControls();
                if (string.IsNullOrEmpty(txtCalendar.ID))
                {
                    _textCalendarID = Guid.NewGuid().ToString("N") + "$txtCalendar";
                    return _textCalendarID;
                }
                return txtCalendar.ID;
            }
            set
            {
                EnsureChildControls();
                if (string.IsNullOrEmpty(value))
                {
                    _textCalendarID = Guid.NewGuid().ToString("N") + this.txtCalendar.UniqueID;
                }
                else
                {
                    _textCalendarID = this.txtCalendar.UniqueID + "$" + value;
                }
            }
        }        public string ReadOnly
        {
            get
            {
                EnsureChildControls();
                return txtCalendar.ReadOnly.ToString();
            }
            set
            {
                EnsureChildControls();
                if (value.ToLower() == "true")
                {
                    txtCalendar.ReadOnly = true;
                }
                else
                {
                    txtCalendar.ReadOnly = false;
                }
            }
        }        public string ImageUrl
        {
            get
            {
                EnsureChildControls();
                return imgeCalendar.ImageUrl;
            }
            set
            {
                EnsureChildControls();
                imgeCalendar.ImageUrl = value;
                //imgeCalendar.Attributes.Add("onclick", "WdatePicker({el:$dp.$('" + txtCalendar.ClientID + "'),dateFmt:'yyyy/MM/dd'})");
                imgeCalendar.Attributes.Add("onclick", "CalendarTextOnClick()");
            }
        }        protected override void RecreateChildControls()
        {
            EnsureChildControls();
        }        protected override void CreateChildControls()
        {
            Controls.Clear();
            txtCalendar = new TextBox();
            txtCalendar.ID = this.ID;
            imgeCalendar = new Image();
            this.Controls.Add(txtCalendar);
            this.Controls.Add(imgeCalendar);
        }        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0", false);
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0", false);
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            txtCalendar.ReadOnly = true;
            txtCalendar.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderBeginTag(HtmlTextWriterTag.Td);
            imgeCalendar.RenderControl(writer);
            writer.RenderEndTag();
            writer.RenderEndTag();
            writer.RenderEndTag();
        }
    }
}
我想通过attribute.add的方式给img赋属性,请问怎样修改代码
以前一直没做过自定义控件,现在正试着练习,请高手赐教;

解决方案 »

  1.   

    比如说 CalenderTextBox Cnd = new CalenderTextBox();
    Cnd.Attributes.Add("onmouseup","jsonmouseup()");
      

  2.   

    添加一个属性吧:public AttributeCollection Attributes
    {
        get
        {
            return imgeCalendar.Attributes;
        }
        set
        {
            imgeCalendar.Attributes = value;
        }
    }
      

  3.   


    您说的方式不行,AttributeCollection是只读的
      

  4.   

    那就把set属性去掉
    只get就好了,这样,你调用Attributes.Add时,也是指向这个Image的
    public AttributeCollection Attributes
    {
        get
        {
            return imgeCalendar.Attributes;
        }
    }
      

  5.   

    谢谢youbl
    这两天一直忙,没上来揭帖;