IPostBackEventHandlerとIPostBackDataHandler
一、IPostBackEventHandlerとIPostBackDataHandlerインターフェース制御項目PostBackで発生したイベントを処理するには、IPostBackEventHandlerまたはIPostBackDataHandlerインターフェースを実作しなければならない.この2つのインターフェースにはどのような違いがあるのだろうか.例えばButtonは実作IPostBackEventHandlerインターフェースであり、ButtonのClickイベントのような制御項目によって生成されたPostBackが直接イベントを開始する.例えばTextBoxは実作IPostBackDataHandlerインターフェースであり、ページにPostBackが生成されると、ユーザー側から入力された新しい値が制御項目に伝達され、制御項目自体がイベントを引き起こすかどうかを決定する.TextBoxの例では、新しい値が古い値と異なる場合にTextChangedイベントが発生すると判断します.二、IPostBackEventHandlerインターフェース実作まずIPostBackEventHandlerインターフェースを紹介し、RaisePostBackEventメソッドを含み、制御項目はこのメソッドでそれらのイベントを開始する必要がある.WebControlがMyButtonカテゴリを作成してIPostBackEventHandlerインタフェースを説明するためにWebControlを継承し、Renderメソッドでボタンを直接入力するHTMLオリジナルコードを制御するプログラムを簡略化し、Clickイベントを定義します.IPostBackEventHandlerインターフェースを実作するRaisePostBackEventメソッドで、このメソッドではClickイベントが直接発生します.
オリジナルファイルをクリップブックにコピーして印刷するには
Public Class MyButton
Inherits WebControl
Implements IPostBackEventHandler
'''
'''Clickイベント.
'''
Public Event Click As EventHandler
'''
'''Clickイベントを開始します.
'''
Private Sub OnClick(ByVal e As EventArgs)
RaiseEvent Click(Me, e)
End Sub
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
Dim e As New EventArgs()
OnClick(e)'Clickイベントを開始
End Sub
'''
'''Renderメソッドを上書きします.
'''
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format(",Me.UniqueID) writer.Write(sHTML)
End Sub
End Class
ページ上でMyButton制御項目をドラッグし、プロパティウィンドウでClickイベントを見つけ、ポイント2でClickイベント処理関数を生成し、テストプログラムコードを以下のように作成します.
オリジナルファイルをクリップブックにコピーして印刷するには
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write(「MyButton Clickイベント」)End Sub
プログラムを実行し、MyButtonボタンを押すとRaisePostBackEventメソッドが実行され、さらにClickイベントが発生し、Clickイベント処理関数のプログラムコードも実行されます.
三、IPostBackDataHandlerインターフェース実作
IPostBackDataHandlerインタフェースにはLoadPostDataおよびRaisePostDataChangedEventメソッドが含まれており、ページPostBackの場合、IPostBackDataHandlerインタフェースを持つ制御項目を探し、まずLoadPostDataメソッドを実行し、制御項目はLoadPostDataメソッドでユーザー側の入力値でイベントを開始するかどうかを決定し、LoadPostDataがTrueに戻ってイベントを開始することを示すと、RaisePostDataChangedEventメソッドを実行して、それらのイベントを開始するかどうかを決定し、逆にFalseに戻るとイベントを開始しないことを示します.
WebControlのMyTextカテゴリの作成を継承してIPostBackDataHandlerインタフェースを説明し、制御項目プログラムコードを簡略化してRenderメソッドに直接文字ボックスのHTMLオリジナルコードを入力し、TextChangedイベントを定義します.LoadPostDataメソッドでは、ユーザー側の入力値が現在の値と異なるかどうかを判断し、異なる場合にTrueに戻ります.この場合、RaisePostData ChangedEventメソッドが実行され、TextChangedイベントが発生します.
オリジナルファイルをクリップブックにコピーして印刷するには
Public Class MyTextbox
Inherits WebControl
Implements IPostBackDataHandler
Public Property Text() As String
Get
Return CType(Me.ViewState("Text"), String)
End Get
Set(ByVal value As String)
Me.ViewState("Text") = value
End Set
End Property
'''
'''TextChangedイベント.
'''
Public Event TextChanged As EventHandler
'''
'''TextChangedイベントを開始します.
'''
Private Sub OnTextChanged(ByVal e As EventArgs)
RaiseEvent TextChanged(Me, e)
End Sub
Public Function LoadPostData(ByVal postDataKey As String, ByVal postCollection As System.Collections.Specialized.NameValueCollection) As Boolean Implements System.Web.UI.IPostBackDataHandler.LoadPostData
'フロントエンドユーザ入力値 Dim oNewValue As String = postCollection.Item(postDataKey)
If oNewValue <> Me.Text Then
Me.Text = oNewValue
Return True
Else
Return False
End If
End Function
Public Sub RaisePostDataChangedEvent() Implements System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent
Dim e As New EventArgs()
'TextChangedイベントを開始する OnTextChanged(e)
End Sub
'''
'''Renderメソッドを上書きします.
'''
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format("", Me.UniqueID, Me.Text)
writer.Write(sHTML)
End Sub
End Class
ページ上でMyTextboxおよびMyButton制御項目をドラッグし、MyButtonのClickおよびMyTextboxのTextChangedイベントで以下のテストコードを作成します.
オリジナルファイルをクリップブックにコピーして印刷するには
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write(「MyButton Clickイベント」) Me.Page.Response.Write("
")
End Sub
Protected Sub MyTextbox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyTextbox1.TextChanged
Me.Page.Response.Write(「MyTextbox TextChangedイベント」) Me.Page.Response.Write("
")
End Sub
プログラムを実行し、MyTextboxで「A」を入力し、MyButtonを押すと、MyTextboxの値「空文字列->「A」のため、MyTextboxのTextChangedイベントおよびMyButtonのClickイベントが発生します.
オリジナルファイルをクリップブックにコピーして印刷するには
Public Class MyButton
Inherits WebControl
Implements IPostBackEventHandler
'''
'''Clickイベント.
'''
Public Event Click As EventHandler
'''
'''Clickイベントを開始します.
'''
Private Sub OnClick(ByVal e As EventArgs)
RaiseEvent Click(Me, e)
End Sub
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
Dim e As New EventArgs()
OnClick(e)'Clickイベントを開始
End Sub
'''
'''Renderメソッドを上書きします.
'''
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format(",Me.UniqueID) writer.Write(sHTML)
End Sub
End Class
Public Class MyButton
Inherits WebControl
Implements IPostBackEventHandler
''' <summary>
''' Click 。
''' </summary>
Public Event Click As EventHandler
''' <summary>
''' Click 。
''' </summary>
Private Sub OnClick(ByVal e As EventArgs)
RaiseEvent Click(Me, e)
End Sub
Public Sub RaisePostBackEvent(ByVal eventArgument As String) Implements System.Web.UI.IPostBackEventHandler.RaisePostBackEvent
Dim e As New EventArgs()
OnClick(e) ' Click
End Sub
''' <summary>
''' Render 。
''' </summary>
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format("<INPUT TYPE=Submit Name={0} Value = ' '/>", Me.UniqueID)
writer.Write(sHTML)
End Sub
End Class
ページ上でMyButton制御項目をドラッグし、プロパティウィンドウでClickイベントを見つけ、ポイント2でClickイベント処理関数を生成し、テストプログラムコードを以下のように作成します.
オリジナルファイルをクリップブックにコピーして印刷するには
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write(「MyButton Clickイベント」)End Sub
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write("MyButton Click ")
End Sub
プログラムを実行し、MyButtonボタンを押すとRaisePostBackEventメソッドが実行され、さらにClickイベントが発生し、Clickイベント処理関数のプログラムコードも実行されます.
三、IPostBackDataHandlerインターフェース実作
IPostBackDataHandlerインタフェースにはLoadPostDataおよびRaisePostDataChangedEventメソッドが含まれており、ページPostBackの場合、IPostBackDataHandlerインタフェースを持つ制御項目を探し、まずLoadPostDataメソッドを実行し、制御項目はLoadPostDataメソッドでユーザー側の入力値でイベントを開始するかどうかを決定し、LoadPostDataがTrueに戻ってイベントを開始することを示すと、RaisePostDataChangedEventメソッドを実行して、それらのイベントを開始するかどうかを決定し、逆にFalseに戻るとイベントを開始しないことを示します.
WebControlのMyTextカテゴリの作成を継承してIPostBackDataHandlerインタフェースを説明し、制御項目プログラムコードを簡略化してRenderメソッドに直接文字ボックスのHTMLオリジナルコードを入力し、TextChangedイベントを定義します.LoadPostDataメソッドでは、ユーザー側の入力値が現在の値と異なるかどうかを判断し、異なる場合にTrueに戻ります.この場合、RaisePostData ChangedEventメソッドが実行され、TextChangedイベントが発生します.
オリジナルファイルをクリップブックにコピーして印刷するには
Public Class MyTextbox
Inherits WebControl
Implements IPostBackDataHandler
Public Property Text() As String
Get
Return CType(Me.ViewState("Text"), String)
End Get
Set(ByVal value As String)
Me.ViewState("Text") = value
End Set
End Property
'''
'''TextChangedイベント.
'''
Public Event TextChanged As EventHandler
'''
'''TextChangedイベントを開始します.
'''
Private Sub OnTextChanged(ByVal e As EventArgs)
RaiseEvent TextChanged(Me, e)
End Sub
Public Function LoadPostData(ByVal postDataKey As String, ByVal postCollection As System.Collections.Specialized.NameValueCollection) As Boolean Implements System.Web.UI.IPostBackDataHandler.LoadPostData
'フロントエンドユーザ入力値 Dim oNewValue As String = postCollection.Item(postDataKey)
If oNewValue <> Me.Text Then
Me.Text = oNewValue
Return True
Else
Return False
End If
End Function
Public Sub RaisePostDataChangedEvent() Implements System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent
Dim e As New EventArgs()
'TextChangedイベントを開始する OnTextChanged(e)
End Sub
'''
'''Renderメソッドを上書きします.
'''
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format("", Me.UniqueID, Me.Text)
writer.Write(sHTML)
End Sub
End Class
Public Class MyTextbox
Inherits WebControl
Implements IPostBackDataHandler
Public Property Text() As String
Get
Return CType(Me.ViewState("Text"), String)
End Get
Set(ByVal value As String)
Me.ViewState("Text") = value
End Set
End Property
''' <summary>
''' TextChanged 。
''' </summary>
Public Event TextChanged As EventHandler
''' <summary>
''' TextChanged 。
''' </summary>
Private Sub OnTextChanged(ByVal e As EventArgs)
RaiseEvent TextChanged(Me, e)
End Sub
Public Function LoadPostData(ByVal postDataKey As String, ByVal postCollection As System.Collections.Specialized.NameValueCollection) As Boolean Implements System.Web.UI.IPostBackDataHandler.LoadPostData
'
Dim oNewValue As String = postCollection.Item(postDataKey)
If oNewValue <> Me.Text Then
Me.Text = oNewValue
Return True
Else
Return False
End If
End Function
Public Sub RaisePostDataChangedEvent() Implements System.Web.UI.IPostBackDataHandler.RaisePostDataChangedEvent
Dim e As New EventArgs()
' TextChanged
OnTextChanged(e)
End Sub
''' <summary>
''' Render 。
''' </summary>
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
Dim sHTML As String
sHTML = String.Format("<INPUT Type=text Name={0} Value={1} >", Me.UniqueID, Me.Text)
writer.Write(sHTML)
End Sub
End Class
ページ上でMyTextboxおよびMyButton制御項目をドラッグし、MyButtonのClickおよびMyTextboxのTextChangedイベントで以下のテストコードを作成します.
オリジナルファイルをクリップブックにコピーして印刷するには
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write(「MyButton Clickイベント」) Me.Page.Response.Write("
")
End Sub
Protected Sub MyTextbox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyTextbox1.TextChanged
Me.Page.Response.Write(「MyTextbox TextChangedイベント」) Me.Page.Response.Write("
")
End Sub
Protected Sub MyButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyButton1.Click
Me.Page.Response.Write("MyButton Click ")
Me.Page.Response.Write("<br/>")
End Sub
Protected Sub MyTextbox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyTextbox1.TextChanged
Me.Page.Response.Write("MyTextbox TextChanged ")
Me.Page.Response.Write("<br/>")
End Sub
プログラムを実行し、MyTextboxで「A」を入力し、MyButtonを押すと、MyTextboxの値「空文字列->「A」のため、MyTextboxのTextChangedイベントおよびMyButtonのClickイベントが発生します.