控制項學習四(屬性與事件)
四.初探控制項屬性(Property)的建立
1.當我們建立一個控制項(或類別),可以建立控制項的屬性(property),屬性多半是一個值,或是指到另外一個物件,或是一個集合。
請注意,在該屬性宣告的時候,加上了【Default】關鍵字,所以該屬性為【預設屬性】,使用的時候比較特別,可以有底下這兩種用法,兩種使用方法的意義都一樣:
Row.Item(0)=“測試”
Row(0)=“測試”
也就是說,預設屬性可以不用多打【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會自動建立這個事件的程式碼骨架。