----------code----------
Overridable Protected Sub Render(ByVal writer As HtmlTextWriter)
----------end----------
----------code----------
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
writer.Write("大家好")
End Sub
----------end----------
----------code----------
Overridable Protected Sub RenderChildren(ByVal writer As HtmlTextWriter)
----------end----------
----------code----------
Public Class Composite
Inherits Control
...
Protected Overrides Sub Render(writer As HtmlTextWriter)
writer.Write("以下所呈現者是子控制項")
RenderChildren(writer)
writer.Write("以上所呈現者是子控制項")
End Sub
End Class
----------end----------
----------code----------
Protected Overrides Sub RenderChildren(writer As HtmlTextWriter)
' 不執行任何作業即可
End Sub
----------end----------
----------code----------
Overridable Protected Sub AddAttributesToRender( _
ByVal writer As HtmlTextWriter _
)
---------end----------
----------code----------
Protected Overrides Sub AddAttributesToRender(writer As HtmlTextWriter)
writer.AddAttribute(HtmlTextWriterAttribute.Type, "submit")
writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID)
writer.AddAttribute(HtmlTextWriterAttribute.Value, [Text])
MyBase.AddAttributesToRender(writer)
End Sub
----------end----------
----------code----------
Overridable Public Sub RenderBeginTag( _
ByVal writer As HtmlTextWriter _
)
----------end----------
----------code----------
Overridable Public Sub RenderEndTag( _
ByVal writer As HtmlTextWriter _
)
----------end----------
----------code----------
Overridable Protected Sub RenderContents( _
ByVal writer As HtmlTextWriter _
)
----------end----------
----------code----------
請按我一下
----------end----------
----------code----------
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace UserCustomControls
Public Class UserWebControlText
Inherits WebControl
' HtmlTextWriterTag是列舉型別,它用來指定可以傳遞至
' HtmlTextWriter或Html32TextWriter輸出資料流的HTML標記。
Public Sub New()
MyBase.New(HtmlTextWriterTag.Span)
End Sub
Protected Overrides Sub AddAttributesToRender(ByVal writer _
As HtmlTextWriter)
' HtmlTextWriterAttribute是列舉型別,它用來讓你將
' 特定的HTML屬性寫入標記。
writer.AddAttribute(HtmlTextWriterAttribute.Onclick, _
"alert('大家好!我是章立民,請繼續給予支持。');")
' HtmlTextWriterStyle是列舉型別,它用來讓你指定特定的樣式。
writer.AddStyleAttribute(HtmlTextWriterStyle.Color, "Blue")
MyBase.AddAttributesToRender(writer)
End Sub
Protected Overrides Sub RenderContents(ByVal writer _
As HtmlTextWriter)
writer.Write("請按我一下")
MyBase.RenderContents(writer)
End Sub
End Class
End Namespace
----------end----------
----------code----------
----------end----------
----------code----------
章立民工作室
----------end----------
----------code----------
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace UserCustomControls
Public Class UserWebControlLink
Inherits WebControl
' HtmlTextWriterTag是列舉型別,它用來指定可以傳遞至
' HtmlTextWriter或Html32TextWriter輸出資料流的HTML標記。
Public Sub New()
MyBase.New(HtmlTextWriterTag.A)
End Sub
' Content 屬性的私有資料成員
Private _content As String = "章立民工作室"
' Content 屬性用來設定文字超連結上的文字
Public Overridable Property Content() As String
Get
Dim o As Object = ViewState("Content")
If o Is Nothing Then
' 如果使用者於網頁使用此自訂控制項時並未
' 設定Content屬性,則文字超連結的預設文字
' 將是「章立民工作室」。
Return _content
' 假如你希望如果使用者沒有設定 Content 屬性的話,
' 便維持空字串,可採用 Return String.Empty 的寫法。
'Return String.Empty
Else
Return CStr(o)
End If
End Get
Set(ByVal Value As String)
ViewState("Content") = Value
End Set
End Property
' GoWhere 屬性用來設定文字超連結上的 URL
Public Overridable Property GoWhere() As String
Get
Dim o As Object = ViewState("GoWhere")
If o Is Nothing Then
' 如果使用者於網頁使用此自訂控制項時
' 並未設定GoWhere屬性,則預設的Url
' 將是 http://www.gotop.com.tw 。
Return "http://www.gotop.com.tw"
' 假如你希望如果使用者沒有設定 GoWhere 屬性的話,
' 便維持空字串,可採用 Return String.Empty 的寫法。
'Return String.Empty
Else
Return CStr(o)
End If
End Get
Set(ByVal Value As String)
ViewState("GoWhere") = Value
End Set
End Property
Protected Overrides Sub AddAttributesToRender(ByVal _
writer As HtmlTextWriter)
' HtmlTextWriterAttribute是列舉型別,它用來讓你將
' 特定的 HTML 屬性寫入標記。
' 設定工具秘訣文字
writer.AddAttribute(HtmlTextWriterAttribute.Title, _
"讓我們一起前往" & Content)
' 設定目標框架
writer.AddAttribute(HtmlTextWriterAttribute.Target, "_blank")
' 設定 URL
writer.AddAttribute(HtmlTextWriterAttribute.Href, GoWhere)
MyBase.AddAttributesToRender(writer)
End Sub
Protected Overrides Sub RenderContents(ByVal writer _
As HtmlTextWriter)
writer.Write(Content)
MyBase.RenderContents(writer)
End Sub
End Class
End Namespace
----------end----------
----------code----------
----------end----------
----------code----------
Option Explicit On
Option Strict On
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace UserCustomControls
Public Class UserLinkButton
Inherits WebControl
Implements IPostBackEventHandler
' HtmlTextWriterTag是列舉型別,它用來指定可以傳遞至
' HtmlTextWriter或Html32TextWriter輸出資料流的HTML標記。
Public Sub New()
MyBase.New(HtmlTextWriterTag.A)
End Sub
' Content 屬性用來設定文字超連結上的文字
Public Overridable Property Content() As String
Get
Dim o As Object = ViewState("Content")
If o Is Nothing Then
Return String.Empty
Else
Return CStr(o)
End If
End Get
Set(ByVal Value As String)
ViewState("Content") = Value
End Set
End Property
' 定義 Click 事件
Public Event Click As EventHandler
' 叫用 Click 事件的委派
Protected Overridable Sub OnClick(ByVal e As EventArgs)
RaiseEvent Click(Me, e)
End Sub
' 定義引發變更事件之 IPostBackEventHandler 的方法
Public Sub RaisePostBackEvent(ByVal eventArgument As String) _
Implements IPostBackEventHandler.RaisePostBackEvent
OnClick(New EventArgs())
End Sub
Protected Overrides Sub AddAttributesToRender(ByVal _
writer As HtmlTextWriter)
writer.AddAttribute(HtmlTextWriterAttribute.Href, _
"javascript:" + Page.GetPostBackEventReference(Me))
MyBase.AddAttributesToRender(writer)
End Sub
Protected Overrides Sub RenderContents(ByVal writer _
As HtmlTextWriter)
writer.Write(Content)
End Sub
End Class
End Namespace
----------end----------
----------code----------
----------end----------
----------code----------
Protected UserLinkButton1
…
…
Protected Sub UserLinkButton_Click(ByVal sender As Object, _
ByVal e As EventArgs)
Dim MyConnection As New _
SqlConnection("server=(local)\NetSDK; " & _
"database=北風貿易;Trusted_Connection=yes")
Dim sqlstring As String = _
"SELECT 部門,平均薪資 = AVG(目前薪資) " & _
"FROM 飛狐工作室 GROUP BY 部門"
Dim MyCommand As New SqlCommand(sqlstring, MyConnection)
MyConnection.Open()
Dim dr As SqlDataReader = MyCommand.ExecuteReader
EmployeeDataGrid.DataSource = dr
EmployeeDataGrid.DataBind()
dr.Close()
MyConnection.Close()
End Sub
----------end----------
----------code----------
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace UserCustomControls
Public Class UserBanner
Inherits WebControl
' Message 屬性的私有資料成員
Private _message As String = "大家好!"
' Message 屬性
Public Overridable Property Message() As String
Get
Return _message
End Get
Set(ByVal Value As String)
_message = Value
End Set
End Property
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
' 設定
標記中的 src 屬性
writer.AddAttribute(HtmlTextWriterAttribute.Src, _
"Images/Title43.gif")
' 輸出起始
標記
writer.RenderBeginTag(HtmlTextWriterTag.Img)
' 輸出 img 的結尾標記
writer.RenderEndTag()
' 輸出
標記
writer.RenderBeginTag(HtmlTextWriterTag.Br)
writer.RenderEndTag()
' 設定 標記中的 color 屬性
writer.AddAttribute("color", "green")
' 輸出起始 標記與其 color 屬性
writer.RenderBeginTag("font")
' 將 Message 屬性所持有的文字寫入起始 標記
' 與結尾 標記之間
writer.Write(Message)
' 在文字之後繼續寫入
標記以便將文字換列
writer.WriteFullBeginTag("br")
' 將目前的日期時間寫入
writer.Write((System.DateTime.Now))
' 輸出結尾 標記
writer.RenderEndTag()
End Sub
End Class
End Namespace
----------end----------
----------code----------
----------end----------
----------code----------
Imports System
Imports System.Web.UI
Imports System.Web.UI.WebControls
Namespace UserCustomControls
Public Class UserBannerLink
Inherits WebControl
' Message 屬性的私有資料成員
Private _message As String = "大家好!"
' Message 屬性
Public Overridable Property Message() As String
Get
Return _message
End Get
Set(ByVal Value As String)
_message = Value
End Set
End Property
' ImageSource 屬性用來設定圖片
Public Overridable Property ImageSource() As String
Get
Dim o As Object = ViewState("ImageSource")
If o Is Nothing Then
' 如果使用者於網頁使用此自訂控制項時
' 並未設定 ImageSource 屬性,則預設的
' 圖片將是 "Images/Title43.gif"。
Return "Images/Title43.gif"
Else
Return CStr(o)
End If
End Get
Set(ByVal Value As String)
ViewState("ImageSource") = Value
End Set
End Property
' GoWhere 屬性用來設定圖片超連結上的 URL
Public Overridable Property GoWhere() As String
Get
Dim o As Object = ViewState("GoWhere")
If o Is Nothing Then
' 如果使用者於網頁使用此自訂控制項時
' 並未設定 GoWhere 屬性,則預設的 Url
' 將是 http://www.gotop.com.tw 。
Return "http://www.gotop.com.tw"
Else
Return CStr(o)
End If
End Get
Set(ByVal Value As String)
ViewState("GoWhere") = Value
End Set
End Property
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
Dim I As Integer
Dim J As Integer
Const maxRows As Integer = 3
Const maxCols As Integer = 1
writer.WriteBeginTag("table")
writer.AddStyleAttribute(HtmlTextWriterStyle.FontWeight, _
"bold")
writer.AddStyleAttribute(HtmlTextWriterStyle.FontFamily, _
"verdana")
writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, "14pt")
writer.WriteAttribute("border", "0")
writer.Write(HtmlTextWriter.TagRightChar)
writer.WriteLine()
writer.Indent = writer.Indent + 1
For I = 0 To maxRows – 1
writer.WriteFullBeginTag("tr")
writer.WriteLine()
writer.Indent = writer.Indent + 1
For J = 0 To maxCols – 1
writer.WriteBeginTag("td")
writer.WriteAttribute("valign", "center")
writer.WriteAttribute("align", "center")
writer.WriteAttribute("bgcolor", "lightyellow")
writer.Write(HtmlTextWriter.TagRightChar)
Select Case I
Case 0
' 設定 標記中的 Title 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Title, GoWhere)
' 設定 標記中的 Href 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Href, GoWhere)
' 設定 標記中的 Target 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Target, "_blank")
' 輸出起始 標記
writer.RenderBeginTag( _
HtmlTextWriterTag.A)
' 設定
標記中的 src 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Src, ImageSource)
' 設定
標記中的 border 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Border, "0")
' 輸出起始
標記
writer.RenderBeginTag( _
HtmlTextWriterTag.Img)
' 輸出 img 的結尾標記
writer.RenderEndTag()
' 輸出 a 的結尾標記
writer.RenderEndTag()
Case 1
' 設定 標記中的 color 屬性
writer.AddAttribute("color", "red")
' 輸出起始 標記與其 color 屬性
writer.RenderBeginTag("font")
' 將 Message 屬性所持有的文字寫入起始
' 標記與結尾 標記之間
writer.Write(Message)
' 在文字之後繼續寫入
標記以便將文字換列
writer.WriteFullBeginTag("br")
' 將目前的日期時間寫入
writer.Write((System.DateTime.Now))
' 輸出結尾 標記
writer.RenderEndTag()
Case 2
' 輸出
標記
writer.RenderBeginTag( _
HtmlTextWriterTag.Hr)
writer.RenderEndTag()
End Select
writer.WriteEndTag("td")
writer.WriteLine()
Next
writer.Indent = writer.Indent – 1
writer.WriteEndTag("tr")
writer.WriteLine()
Next
writer.Indent = writer.Indent – 1
writer.WriteEndTag("table")
writer.WriteLine()
End Sub
End Class
End Namespace
----------end----------
----------code----------
----------end----------
----------code----------
Imports System
Imports System.Data
Imports System.Data.SqlClient
Namespace UserCustomControls
' 定義提供事件資料的類別 CheckAccountEventArgs
Public Class CheckAccountEventArgs
Inherits EventArgs
' Match 屬性的私有資料成員
Private _match As Boolean = False
Public Sub New(ByVal UserName As String, _
ByVal UserPassword As String)
Dim MyConnection As New _
SqlConnection("server=(local)\NetSDK; " & _
"database=北風貿易;Trusted_Connection=yes")
Dim sqlstring As String = _
"SELECT 筆數 = COUNT(*) FROM 使用者帳戶 " & _
"WHERE 姓名 = @name AND 密碼 = @password"
Dim MyCommand As New SqlCommand(sqlstring, MyConnection)
MyCommand.Parameters.Add("@name", _
SqlDbType.NVarChar, 10).Value = UserName
MyCommand.Parameters.Add("@password", _
SqlDbType.NVarChar, 6).Value = UserPassword
MyConnection.Open()
Dim dr As SqlDataReader = _
MyCommand.ExecuteReader(CommandBehavior.SingleRow)
If dr.Read Then
If dr("筆數") > 0 Then
_match = True
End If
End If
dr.Close()
MyConnection.Close()
End Sub
' Match 屬性
Public ReadOnly Property Match() As Boolean
Get
Return _match
End Get
End Property
End Class
' 事件的委派宣告
' CheckAccountEventHandler 是 CheckAccount 事件的委派。
' sender 代表引發事件的物件。
' CheckAccountEventArgs 是持有 CheckAccount 事件之事件
' 資料的類別,它係衍生自持有事件資料的基底類別 EventArgs 。
Public Delegate Sub CheckAccountEventHandler(ByVal sender _
As Object, ByVal e As CheckAccountEventArgs)
End Namespace
----------end----------
----------code----------
vbc /target:module /out:bin\CheckAccountEvent.netmodule
/r:System.dll,System.Web.dll,System.Data.dll CheckAccountEvent.vb
----------end----------
----------code----------
Option Explicit On
Option Strict On
Imports System
Imports System.Web
Imports System.Web.UI
Imports System.Collections.Specialized
Namespace UserCustomControls
Public Class UserLogin
Inherits Control
' 實作 IPostBackDataHandler 與 IPostBackEventHandler 介面
Implements IPostBackDataHandler, IPostBackEventHandler
Private UserName As String
Private UserPassword As String
' Message 屬性的私有資料成員
Private _message As String = "自訂提示訊息"
' Message 屬性
Public Property Message() As String
Get
Return _message
End Get
Set(ByVal Value As String)
_message = Value
End Set
End Property
' 使用 event 關鍵字定義一個型別為
' CheckAccountEventHandler 事件委派的
' 公用事件成員 CheckAccount
Public Event CheckAccount As CheckAccountEventHandler
' 使用一個受保護的方法來引發 CheckAccount 事件
Protected Overridable Sub OnCheckAccount(ByVal e _
As CheckAccountEventArgs)
RaiseEvent CheckAccount(Me, e)
End Sub
Public Overridable Function LoadPostData(ByVal _
postDataKey As String, ByVal values As _
NameValueCollection) As Boolean Implements _
IPostBackDataHandler.LoadPostData
' 取得使用者所輸入的使用者名稱
UserName = values((UniqueID & "UserName"))
' 取得使用者所輸入的使用者密碼
UserPassword = values((UniqueID & "UserPassword"))
Page.RegisterRequiresRaiseEvent(Me)
Return False
End Function
Public Overridable Sub RaisePostDataChangedEvent() _
Implements IPostBackDataHandler.RaisePostDataChangedEvent
End Sub
Public Sub RaisePostBackEvent(ByVal eventArgument _
As String) Implements _
IPostBackEventHandler.RaisePostBackEvent
OnCheckAccount(New _
CheckAccountEventArgs(UserName, UserPassword))
End Sub
' 覆寫 Render 方法
Protected Overrides Sub Render(ByVal writer As HtmlTextWriter)
Dim I As Integer
Dim J As Integer
Const maxRows As Integer = 4
Const maxCols As Integer = 1
writer.WriteBeginTag("table")
writer.WriteAttribute("border", "0")
writer.Write(HtmlTextWriter.TagRightChar)
writer.WriteLine()
writer.Indent = writer.Indent + 1
For I = 0 To maxRows – 1
writer.WriteFullBeginTag("tr")
writer.WriteLine()
writer.Indent = writer.Indent + 1
For J = 0 To maxCols – 1
writer.WriteBeginTag("td")
writer.WriteAttribute("valign", "center")
If I = 2 Or I = 3 Then
writer.WriteAttribute("align", "center")
End If
writer.WriteAttribute("bgcolor", "lightyellow")
writer.Write(HtmlTextWriter.TagRightChar)
Select Case I
Case 0
' 輸出
標記
writer.RenderBeginTag( _
HtmlTextWriterTag.Hr)
writer.RenderEndTag()
' 設定 標記中的 color 屬性
writer.AddAttribute("color", "blue")
' 輸出起始 標記與其 color 屬性
writer.RenderBeginTag("font")
' 將文字寫入起始 標記與
' 結尾 標記之間
writer.Write("請輸入使用者名稱: ")
' 輸出結尾 標記
writer.RenderEndTag()
writer.AddAttribute( _
HtmlTextWriterAttribute.Type, "Text")
writer.AddAttribute( _
HtmlTextWriterAttribute.Name, _
Me.UniqueID + "UserName")
writer.AddAttribute( _
HtmlTextWriterAttribute.Value, "")
writer.RenderBeginTag( _
HtmlTextWriterTag.Input)
writer.RenderEndTag()
Case 1
' 設定 標記中的 color 屬性
writer.AddAttribute("color", "blue")
' 輸出起始 標記與其 color 屬性
writer.RenderBeginTag("font")
' 將文字寫入起始 標記與
' 結尾 標記之間
writer.Write("請輸入使用者密碼: ")
' 輸出結尾 標記
writer.RenderEndTag()
' 設定 標記中的 Type 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Type, "Text")
' 設定 標記中的 Name 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Name, _
Me.UniqueID + "UserPassword")
' 設定 標記中的 Value 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Value, "")
' 輸出起始 標記及其
' Type、Name 與 Value 屬性
writer.RenderBeginTag( _
HtmlTextWriterTag.Input)
' 輸出結尾標記
writer.RenderEndTag()
Case 2
' 設定 標記中的 Type 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Type, "Submit")
' 設定 標記中的 Name 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Name, Me.UniqueID)
' 設定 標記中的 Value 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Value, "送出")
' 輸出起始 標記及其
' Type、Name 與 Value 屬性
writer.RenderBeginTag( _
HtmlTextWriterTag.Input)
' 輸出結尾標記
writer.RenderEndTag()
' 設定 標記中的 Type 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Type, "Submit")
' 設定 標記中的 Name 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Name, _
Me.UniqueID + "Reset")
' 設定 標記中的 Value 屬性
writer.AddAttribute( _
HtmlTextWriterAttribute.Value, "重新輸入")
' 輸出起始 標記及其
' Type、Name 與 Value 屬性
writer.RenderBeginTag( _
HtmlTextWriterTag.Input)
' 輸出結尾標記
writer.RenderEndTag()
Case 3
writer.RenderBeginTag( _
HtmlTextWriterTag.Span)
writer.Write(Me.Message)
writer.RenderEndTag()
' 輸出
標記
writer.RenderBeginTag( _
HtmlTextWriterTag.Hr)
writer.RenderEndTag()
End Select
writer.WriteEndTag("td")
writer.WriteLine()
Next
writer.Indent = writer.Indent – 1
writer.WriteEndTag("tr")
writer.WriteLine()
Next
writer.Indent = writer.Indent – 1
writer.WriteEndTag("table")
writer.WriteLine()
End Sub
End Class
End Namespace
----------end----------
----------code----------
vbc /addmodule:CheckAccountEvent.netmodule /target:library
/out:bin\UDFControls.dll /libpath:bin\
/r:System.dll,System.web.dll,System.drawing.dll,System.Data.dll UDF*.vb
----------end----------