最近看了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