日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

控制項學習三(從繼承開始)

發(fā)布時(shí)間:2024/1/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 控制項學習三(從繼承開始) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

三.從繼承開始

1.繼承控制項(xiàng)

所有的控制項(xiàng)設(shè)計(jì),都是從繼承一個(gè)物件而來。

當(dāng)我們建立一個(gè)新的控制項(xiàng)專案,系統(tǒng)會(huì)自動(dòng)生成一些程式碼,例如,

Inherits System.Web.UI.WebControls.WebControl

繼承WebControl的好處是:它有所有web控制項(xiàng)最基本的屬性、方法和事件。

當(dāng)然,要讓這些發(fā)揮效果,Render程式碼中還有做一些事情。

??? Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

??????? output.Write("write...")

??? End Sub


關(guān)於Render方法

為什麼Render方法可以顯示控制項(xiàng)?

其實(shí),您仔細(xì)看的話,會(huì)發(fā)現(xiàn)每個(gè)控制項(xiàng)一定都會(huì)有Render方法,連WebFormPage都有,就是因?yàn)?/span>WebFormRneder方法,會(huì)去呼叫WebForm上每個(gè)控制項(xiàng)的Render方法,並傳入【System.Web.UI.HtmlTextWriter】,而每一個(gè)Web控制項(xiàng)透過傳入的【System.Web.UI.HtmlTextWriter】,將自己的HTML碼輸出,一個(gè)接一個(gè),WebForm上面的每一個(gè)控制項(xiàng),都會(huì)透過傳入的【System.Web.UI.HtmlTextWriter】物件,將自己的HTML嗎會(huì)被逐一顯示出來,因此,整個(gè)WebForm機(jī)制就完成了,HTML碼被完整的輸出到使用者端,變成我們看到的網(wǎng)頁(yè)。

?

?

?

?

?

?

?

?

1.????? 繼承複雜的類別

假定我們要擴(kuò)充【Panel控制項(xiàng)】的功能。那么就需要繼承System.Web.UI.WebControls.Panel

<DefaultProperty("ScrollBars"), ToolboxData("<{0}:ScrollPanel runat=server></{0}:ScrollPanel>")> Public Class ScrollPanel

??? Inherits System.Web.UI.WebControls.Panel

之所以要繼承Panel,就是希望原本Panel的一些功能都還有,所以需要修改Rneder方法。

??? '覆寫Render

??? Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

??????? MyBase.Render(writer)

?? ?End Sub

也就是說,我們?cè)谘}寫了【Render】方法之後,也要回頭呼叫原本繼承的物件(MyBase)的【Render】方法,並且傳入自己的【System.Web.UI.HtmlTextWriter】當(dāng)作參數(shù)。這一做是為了在複寫【Render】方法之後,還能確保繼承的父類別的Render方法有被正常呼叫到。

之所以要呼叫到繼承的父類別的Render的方法,是為了讓繼承來的ScorllPanel可以正常顯示,原本繼承Panel而來的ScrollPanel控制項(xiàng)的Render方法,本身就包含了顯示PanelHTML碼為<div style..>…</div>)的程式碼,而這些程式碼都會(huì)存在與繼承的Render方法中,所以,我們複寫了父類別的Render,就要在我們的Render程式碼中,呼叫自己基地類別(父類別)的Render方法。

如果不呼叫會(huì)怎樣?那網(wǎng)頁(yè)輸出后就會(huì)完全看不到這個(gè)控制項(xiàng),因?yàn)橹饕母割悇eRender方法(在網(wǎng)頁(yè)上產(chǎn)生一個(gè)<div style…>…</div>的程式碼)并沒有執(zhí)行到。

如果我們乾脆不複寫這個(gè)方法呢?也行,那ScrollPanel的顯示就會(huì)和原本的Panel一樣(因?yàn)槔^承自Panel控制項(xiàng))。

複寫Render方法時(shí)的HtmlTextWriter物件

??? '底下的Render會(huì)產(chǎn)生一段按鈕的HTML 例如:<Button> 標(biāo)題文字 </Button>

??? Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

??????? '註冊(cè)一個(gè)隱藏欄位

??????? Me.Page.RegisterHiddenField("For_WebCustomControl1", "")

??????? 'Render控制項(xiàng)HTML碼

??????? Dim JavaScript As String

??????? '建立 Postback 用的 JavaScript

??????? JavaScript = "Form1.For_WebCustomControl1.value='" & Me.ClientID & "';Form1.submit();"

??????? output.AddAttribute("onclick", JavaScript)

??????? output.AddAttribute("id", Me.ClientID)

??????? output.AddAttribute("name", Me.ClientID)

??????? output.RenderBeginTag("button")

??????? output.Write(Me.Text)

??????? output.RenderEndTag()

?? ?End Sub

注意,在.AddAttribute被執(zhí)行時(shí),并不會(huì)立刻輸出屬性,而是等到第二行“RenderBeginTag”執(zhí)行時(shí),才會(huì)將先前“AddAttribute”加入的屬性值,整合在要顯示的標(biāo)記中一并輸出。

轉(zhuǎn)載于:https://www.cnblogs.com/htht66/archive/2008/11/15/1334164.html

總結(jié)

以上是生活随笔為你收集整理的控制項學習三(從繼承開始)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。