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


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);
}

优质内容筛选与推荐>>
1、【LeetCode】72. Edit Distance
2、Flex Paper 的unable to open 'locale/en_US' 问题
3、C#防止内存泄露的方法
4、<textarea></textarea>为空的问题
5、careercup-排序和查找 11.4


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号