ASP.NET自定义控件入门Demo
最近看了MSDN关于自定义控件的介绍,根据官方的文档,自己学着做了一个简单的Demo给需要的朋友参考。
ASP.NET 源生的TextBox是不带Label标签的,这里我要实现的是创建一个带Label标签的TextBox,并且默认填充Text值为GUID(只读)
实际上现在很多第三方组件都有这种控件,如Ext.Net,FineUI等等。这里只是为了学习了解自定义控件的开发。
步入正题
1.在VS2010中创建一个类库项目,我选择的框架是3.5。名称“MyTextBoxControl”
2.然后新建一个类文件,名称“MyTextBoxControl.cs”
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.ComponentModel; using System.Web.UI; using System.Web.UI.WebControls; using System.Security.Permissions; namespace MyTextBoxControl { [ AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal), DefaultProperty("Text"), ToolboxData("<{0}:MyTextBoxControl runat=\"server\"> </{0}:MyTextBoxControl>") ] public class MyTextBoxControl : TextBox//继承源生TextBox { /// <summary> /// 为TextBox扩展的Label标签 /// </summary> [ Bindable(true), Category("Appearance"), DefaultValue("Label1:"), Description("The control content text."), Localizable(true) ] public virtual string Label { get { string s = (string)ViewState["Label"]; return (s == null) ? "Label1:" : s;//如果控件Label为空,默认值为"Label1" } set { ViewState["Label"] = value; } } /// <summary> /// 重绘控件 /// </summary> /// <param name="writer"></param> protected override void Render(System.Web.UI.HtmlTextWriter writer) { System.Web.UI.WebControls.Label lable = new Label(); lable.ID = "Label1"; lable.Text = this.Label;//设置标签文本 lable.Font.Bold = true;//设置文本显示为粗体 lable.RenderControl(writer);//将Label输出到控件中 this.Width = Unit.Pixel(255);//设置默认宽度 this.Text = Guid.NewGuid().ToString("N").ToUpper();//默认文本,设置默认Text值 this.ReadOnly = true;//设置Text默认只读 base.Render(writer);//输出控件 } } }
编译项目,会在Debug目录下生成MyTextBoxControl.dll文件
3.新建一个网站项目测试自定义控件,项目名称“TestControl”先引用刚才的控件
在VS2010菜单上选择“工具”》“选择工具箱”选择MyTextBoxControl.dll所在目录,确定
然后在VS2010的工具栏上会出现刚才添加的控件了
接着大家就可以像其他控件一样拖动使用了,请看下面的截图
这里Label属性默认为空,我们可以设置成其他值。最后上一张运行图
我这个Demo做的比较简单,只是入门。更复杂的官方文档有很详细的介绍 有兴趣的朋友可以多研究下http://msdn.microsoft.com/zh-cn/library/bb386519(v=vs.90).aspx
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。