成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET自定義控件應(yīng)該如何實現(xiàn)?

開發(fā) 后端
這里將介紹如何實現(xiàn).NET自定義控件,在.NET平臺上我們很喜歡從Control來繼承,但是筆者不是很贊同,希望本文能對大家有所幫助。
.NET自定義控件有很多人其實不太適應(yīng)去試用,一般都是從Control來繼承,但是如果在工作中積累一定量的.NET自定義控件,對今后的工作是很有幫助的。

自己對C#與.NET的學(xué)習(xí)并不算深入,只是這段時間要用ASP.NET來做項目,也是出去無奈,只好好的學(xué)習(xí)了一番,學(xué)完后,感覺的確很好,加上Visual Studio的集成開發(fā)環(huán)境,這個開發(fā)的確迅速,而且容易上手,項目很快就要完工了,現(xiàn)在來總結(jié)點當(dāng)時沒顧得上總結(jié)的東西,決定深入下.NET。

在開發(fā)項目的時候,其實我根本就不知道怎么去做.NET自定義控件,有一個復(fù)選框級聯(lián)選擇的功能,我用的是ThreeView控件做的,當(dāng)時并不知道怎么去添加TreeView子節(jié)點控件的響應(yīng)事件,應(yīng)是用js+dom在客戶端添加TreeView生成html元素的事件,很麻煩也費力,也不便維護。

所以這次深入,決定先從.NET自定義控件入手,看了一些資料,關(guān)于自定義的控件的。自己想了想如果能夠知道.net控件庫中的控件類是怎么寫的,那不更好的操縱已有的控件和更好地開發(fā)自定義控件。到網(wǎng)上找了下,就在博客園上找到了一個C#反編譯器Reflector(下載地址http://downloads.red-gate.com/reflector.zip),很好用,能夠把.NET庫給反編譯出來。

從自己的幾乎開始,先看控件部分的,按照Vs中工具箱面板中的控件順序看看,這些控件類的源代碼

***個當(dāng)然是簡單的Label類了

  1. Code  
  2. DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ControlValueProperty("Text"), ControlBuilder(typeof(LabelControlBuilder)), DefaultProperty("Text"), ParseChildren(false), Designer("System.Web.UI.Design.WebControls.LabelDesigner, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ToolboxData("<{0}:Label runat=\"server\" Text=\"Label\">"), AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]  
  3. public class Label : WebControl, ITextControl  
  4. {  
  5.     // Methods  
  6.     public Label();  
  7.     internal Label(HtmlTextWriterTag tag);  
  8.     protected override void AddAttributesToRender(HtmlTextWriter writer);  
  9.     protected override void AddParsedSubObject(object obj);  
  10.     protected override void LoadViewState(object savedState);  
  11.     protected internal override void RenderContents(HtmlTextWriter writer);  
  12.  
  13.     // Properties  
  14.     [WebCategory("Accessibility"), Themeable(false), IDReferenceProperty, TypeConverter(typeof(AssociatedControlConverter)), DefaultValue(""), WebSysDescription("Label_AssociatedControlID")]  
  15.     public virtual string AssociatedControlID { getset; }  
  16.     internal bool AssociatedControlInControlTree { getset; }  
  17.     internal override bool RequiresLegacyRendering { get; }  
  18.     protected override HtmlTextWriterTag TagKey { get; }  
  19.     [PersistenceMode(PersistenceMode.InnerDefaultProperty), WebCategory("Appearance"), Bindable(true), DefaultValue(""), WebSysDescription("Label_Text"), Localizable(true)]  
  20.     public virtual string Text { getset; }  

Expand Methods

這些是Label內(nèi)置成員,寫過自定義控件的朋友都知道,一般要重載Control類的Render方法,.net庫中帶的控件類,也不例外,也是要重載這個方法的
Label比較簡單,我們托一個頁面可以看到其生成html為Label相當(dāng)簡單的,我們可以寫這樣一個類來模擬Label類

  1. public class MyLabel : Control  
  2. {  
  3.     public MyLabel()  
  4.     { }  
  5.  
  6.     protected override void Render(HtmlTextWriter writer)   
  7.     {  
  8.  
  9.         writer.RenderBeginTag(HtmlTextWriterTag.Span);  
  10.         writer.Write("Label");  
  11.         writer.RenderEndTag();  
  12.  
  13.     }  

在aspx對應(yīng)的cs文件的load方法中寫入如下代碼

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     MyLabel ml = new MyLabel();  
  4.     this.form1.Controls.Add(ml);  

我們可以看到結(jié)果的html和.net庫中的Label(少了id,呵呵)是一樣的,當(dāng)然了,這只是一種,很簡單的模仿,如果Label的其他屬性設(shè)置了,html內(nèi)容就會變化的
看上門的Label的源碼,大家并沒有看到Label中重載Render方法是吧,其實這個是在 RenderContents方法中調(diào)用了父類WebControl的Rende方法,而WebControl中實現(xiàn)了對Render方法的重載。

看看Label.RenderContents()

  1. Code  
  2. protected internal override void RenderContents(HtmlTextWriter writer)  
  3. {  
  4.     if (base.HasRenderingData())  
  5.     {  
  6.         base.RenderContents(writer);  
  7.     }  
  8.     else  
  9.     {  
  10.         writer.Write(this.Text);  
  11.     }  

而我們自定義控件的時候,經(jīng)常直接從Control繼承,雖然是WebControl性質(zhì)的,雖然有WebControl,但是很多就是喜歡從Control來繼承,不知道為什么,不過我并不怎么贊成。畢竟那樣從軟件設(shè)計上來看就是一種冗余吧,也許WebControl不符合很多朋友們的使用吧。

在Label中AddAttributesToRender方法實現(xiàn)了動態(tài)添加屬性和顯示屬性。

我的學(xué)習(xí)方法就是從表面上知道好東東怎么用之后,就開始深入,了解其運行機制、實現(xiàn)原理,那樣就可以很輕松地把整個框架系統(tǒng)的理解下來,可以上下統(tǒng)一,以后做東西可以不管底層的東西,但做起來可以游刃有余。

這里有個HtmlWriterText類,估計有的朋友不知道是干啥子用的,我找了兩篇文章,不明白的朋友可以看下
http://msdn.microsoft.com/zh-cn/library/system.web.ui.htmltextwriter(VS.80).aspx
http://www.cnblogs.com/tonyqus/archive/2005/02/15/104576.html

.NET自定義控件應(yīng)該如何實現(xiàn)就介紹到這里。

本文來自滄桑不盡博客園文章《怎么來自定義控件

【編輯推薦】

  1. C#創(chuàng)建表單簡單介紹
  2. C#修改DataReader默認(rèn)行為
  3. C#設(shè)置CooperativeLevel概述
  4. C#表單增加控件簡單描述
  5. C# EmployeePlug類概述
責(zé)任編輯:彭凡 來源: 博客園
相關(guān)推薦

2009-08-06 17:13:56

ASP.NET自定義控

2009-07-28 09:32:41

ASP.NET自定義控

2009-08-10 14:16:59

ASP.NET自定義控

2009-08-06 09:18:01

ASP.NET自定義控ASP.NET控件開發(fā)

2009-07-31 10:23:09

ASP.NET源碼DateTimePic

2011-04-19 10:33:16

ASP.NET自定義控

2009-06-15 09:50:56

自定義datagridVB Express

2009-06-08 20:13:36

Eclipse自定義控

2013-04-19 10:14:24

2009-08-01 09:21:12

ASP.NET服務(wù)器自ASP.NET服務(wù)器控ASP.NET

2010-08-03 16:13:01

FlexBuilder

2009-08-06 17:52:45

ASP.NET控件開發(fā)自定義控件

2009-09-07 22:00:15

LINQ自定義

2009-08-01 12:00:15

ASP.NET服務(wù)器自ASP.NET服務(wù)器ASP.NET

2009-08-05 17:58:53

自定義集合ASP.NET 2.0

2017-02-17 09:37:12

Android自定義控件方法總結(jié)

2010-01-15 15:26:46

VB.NET自定義類型

2011-05-19 10:16:27

ASP.NET

2009-08-07 11:12:58

ASP.NET控件開發(fā)

2023-01-03 07:40:27

自定義滑塊組件
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美亚州综合 | 久久午夜精品 | 久久国产综合 | 在线激情视频 | 国产aⅴ爽av久久久久久久 | 精品欧美一区二区在线观看欧美熟 | 日韩二 | 偷拍自拍网址 | 特黄特色大片免费视频观看 | 91精品国产综合久久久久蜜臀 | 日韩欧美一区二区三区免费观看 | 人人干免费 | 成人小视频在线观看 | 精品国产18久久久久久二百 | 国产精品久久久久久久久久 | 欧美日韩在线综合 | av网站免费在线观看 | 一区二区三区免费在线观看 | 中文在线播放 | 午夜精品久久久久久久久久久久久 | 欧美黄色录像 | 国产在线精品一区二区三区 | 精品久久一区二区三区 | 日韩亚洲一区二区 | 一区二区片| 欧美一级在线视频 | 欧美综合一区二区 | 天天天堂 | 国产精品毛片无码 | 天天干天天干 | 精品欧美乱码久久久久久1区2区 | 午夜寂寞福利视频 | 久久久美女 | 蜜桃臀av一区二区三区 | 玖玖在线免费视频 | 久久久网| 中文字幕日韩在线观看 | 日韩精品视频在线观看一区二区三区 | 99只有精品 | 欧美美女爱爱视频 | 涩爱av一区二区三区 |