控制項學習四(屬性與事件)

 

.初探控制項屬性(Property)的建立

1.當我們建立一個控制項(或類別),可以建立控制項的屬性(property),屬性多半是一個值,或是指到另外一個物件,或是一個集合。

請注意,在該屬性宣告的時候,加上了【Default】關鍵字,所以該屬性為【預設屬性】,使用的時候比較特別,可以有底下這兩種用法,兩種使用方法的意義都一樣:

Row.Item(0)=“測試”

Row0=“測試”

也就是說,預設屬性可以不用多打【item】這幾個字。但是由於語言的限制,所以預設屬性一定要是陣列類型。

2.屬性可以是ReadOnly或是WriteOnly,如果您設計成ReadOnly,則屬性程式碼中不可有【Set】段落,同樣的,如果您設計成WriteOnly,則屬性中不可以具有【Get】段落。

3.保留屬性的值

一是用私有變量,二是用ViewState

五.建立控制項的方法(Method

可以將其視為一個Sub或是Function

.建立控制項的事件(Event

事件,是控制項中一個非常重要的機制,簡單的說,【事件】的意思,就是當控制項發生了什麽事情的時候,會呼叫到的函式,而我們提供一個介面,讓開發人員可以在這個介面裡面撰寫一些程式,達到某個效果。

1. 建立一個事件

<DefaultProperty("Text"), DefaultEvent("OnClick"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class WebCustomControl1

    Inherits System.Web.UI.WebControls.WebControl

    '建立一個事件

    Public Event OnClick()

…………

End Class

但是這個事件永遠不會發生,因為,我們從來沒有觸發這個事件。

2. 觸發事件

<DefaultProperty("Text"), DefaultEvent("OnClick"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class WebCustomControl1

    Inherits System.Web.UI.WebControls.WebControl

    '建立一個事件

    Public Event OnClick()

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

        '如果隱藏欄位裡面的值是控制項的 ClientID 則觸發 OnClick事件

        If Me.Page.Request.Form("For_WebCustomControl1") = Me.ClientID Then

            RaiseEvent OnClick()

        End If

        MyBase.OnLoad(e)

    End Sub

Imports System.ComponentModel

Imports System.Web.UI

 

<DefaultProperty("Text"), DefaultEvent("OnClick"), ToolboxData("<{0}:WebCustomControl1 runat=server></{0}:WebCustomControl1>")> Public Class WebCustomControl1

    Inherits System.Web.UI.WebControls.WebControl

    '建立一個事件

    Public Event OnClick()

    '底下的Render會產生一段按鈕的HTML 例如:<Button> 標題文字 </Button>

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

        '註冊一個隱藏欄位

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

        'Render控制項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

    Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)

        '如果隱藏欄位裡面的值是控制項的 ClientID 則觸發 OnClick事件

        If Me.Page.Request.Form("For_WebCustomControl1") = Me.ClientID Then

            RaiseEvent OnClick()

        End If

        MyBase.OnLoad(e)

    End Sub

    '建立一個 Text 屬性,Render程式碼會用這個屬性作為按鈕的標題文字

    Dim _text As String

    <Bindable(True), Category("Appearance"), DefaultValue(""), Description("Text屬性的功能是...")> Property [Text]() As String

        Get

            Return _text

        End Get

        Set(ByVal Value As String)

            _text = Value

        End Set

    End Property

End Class

DefaultEvent("OnClick")——默認事件。當控制項Double-Click是,Vs.net會自動建立這個事件的程式碼骨架。

posted @ 2008-11-15 16:29  yellowwood  阅读(301)  评论(0编辑  收藏  举报
Never Give UP