----------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----------