Tracy.Bai

Focus on Data analysis and Mining

导航

自定义控件学习(一、自定义控件与复合控件)

1.自定义控件必须继承于Control类,重写render方法。其中Htmltextwrite有三种方式,
第一种为:write/writeline();
第二种为:writeBeginTag()/writeEndTag();
第三种为:RenderBeginTag()/RenderEndTag();至于这三种方法的区别,我只知道是基于堆栈和非基于堆栈的,具体区别不是很理解。

 protected override void  Render(HtmlTextWriter writer)
         {
             writer.AddAttribute(HtmlTextWriterAttribute.Width, "50%");
             writer.AddAttribute(HtmlTextWriterAttribute.Border, "1");
             writer.RenderBeginTag(HtmlTextWriterTag.Table);
             writer.RenderBeginTag(HtmlTextWriterTag.Tr);
             writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
             writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "blue");

             writer.RenderBeginTag(HtmlTextWriterTag.Td);
             writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, font.Size.ToString());
             writer.RenderBeginTag(HtmlTextWriterTag.Span);

             writer.Write("this is colunm 1");
             writer.RenderEndTag();
             writer.RenderEndTag();
             writer.AddAttribute(HtmlTextWriterAttribute.Align, "center");
             writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "red");
             writer.RenderBeginTag(HtmlTextWriterTag.Td);
             writer.Write("this is colunm 2");
             writer.RenderEndTag();
             writer.RenderEndTag();
             writer.RenderEndTag();


}
2. 为控件添加属性
 public class FontFormat
    {
        private int m_size;
        private Color m_color;
        public FontFormat(int size,Color clr)
        {
            this.m_size = size;
            this.m_color = clr;
        }
        public int Size
        {
            get
            {
                return m_size;
            }
            set
            {
                m_size = value;
            }
        }
        public Color Color
        {
            get
            {
                return m_color;
            }
            set
            {
                m_color = value;
            }
        }
    }

private FontFormat font = new FontFormat(16, Color.Red);
        public FontFormat Font
        {
            get { return font; }
        }
        private string m_name;
        public string Name
        {
            get { return m_name;}
            set{ m_name=value;}
        }
        protected override void  Render(HtmlTextWriter writer)
         {
             
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, font.Color.Name);
             writer.RenderBeginTag(HtmlTextWriterTag.Span);

             writer.Write(m_name);
             writer.RenderEndTag();
          }
3.组合控件,必须重写createchildcontrols()方法
  在复合控件中,在控件的load事件期间操纵某些子控件。然而,只有在Load事件被激话以后才调用crestechLldControl s方法,因此,如果尝试在load处理程序中访问某些子控件,则不可能发现任何子控件。为了保证子控件的创建,  应总是调用EnsurschlldcontroL s()。  该函数台看是否已经调用了CreateChl LdControl s函数(通过检查childcontrol sCreated布尔值),如果没有调用,则调用它。
 TextBox _operand1;
        TextBox _operand2;
        TextBox _result;
        private void OnCalculate(Object sender, EventArgs e)
        {
            int res = Convert.ToInt32(_operand1.Text) + Convert.ToInt32(_operand2.Text);
            _result.Text = res.ToString();
        }
        public int Result
        {
            get { return Convert.ToInt32(_result.Text); }
        }
        protected override void CreateChildControls()
        {
            _operand1 = new TextBox();
            _operand2 = new TextBox();
            _result = new TextBox();
            Controls.Add(_operand1);
            Controls.Add(new LiteralControl("+"));
            Controls.Add(_operand2);
            Controls.Add(new LiteralControl("="));
            Controls.Add(_result);
            Button button = new Button();
            button.Text = "calculate";
            button.Click += new EventHandler(OnCalculate);
            Controls.Add(button);
        }

posted on 2008-04-29 17:12  Love Fendi  阅读(340)  评论(0编辑  收藏  举报