イベントハンドラ。AddHandler と Handles 疑問の疑問の疑(ry
↓こんなイベントを発生するクラスがあったとして、
複数のハンドラを指定したりとか。
[Visual Basic]Imports System
Imports System.Collections.Generic
' ジェネリッククラスであることに何の意味も無いけど。
Public Class Folder(Of T)
Private _value As T
Public Property Value() As T
Get
Return _value
End Get
Set(ByVal value As T)
_value = value
' イベントを発生させる。
RaiseEvent ValueUpdated(Me, New EventArgs)
End Set
End Property
Public Event ValueUpdated(ByVal sender As Object, ByVal e As EventArgs)
End Class
この場合のイベントハンドラの実行順序はどうなるんだろうか?
[Visual Basic]Imports System
Imports System.Collections.Generic
Public Class EventHandleTestClass
' WithEvents 宣言で イベントの発生が通知されるようになるさ。
Private WithEvents eventSender As New Folder(Of Object)
Private Sub eventSender_ValueUpdated_1(ByVal sender As Object, ByVal e As EventArgs) Handles eventSender.ValueUpdated
Console.WriteLine("ハンド!ハンド!今絶対手で触ったって!")End Sub
Private Sub eventSender_ValueUpdated_2(ByVal sender As Object, ByVal e As EventArgs) Handles eventSender.ValueUpdated
Console.WriteLine("ハン㌦!(゚∀゚ )( ゚∀゚)ハン㌦!")End Sub
End Class
AddHandlerなら、順序は保証されるのかしらぁ?
ふむぅ。どっかにドキュメント無いかなぁ〜。(検索中...)
[Visual Basic]Imports System
Imports System.Collections.Generic
Public Class EventHandleTestClass
Private eventSender As New Folder(Of Object)
Public Sub New()
' AddHandler で動的にイベントハンドラを追加するさ。
AddHandler eventSender.ValueUpdated, AddressOf Me.eventSender_ValueUpdated_1
AddHandler eventSender.ValueUpdated, AddressOf Me.eventSender_ValueUpdated_2
End Sub
Private Sub eventSender_ValueUpdated_1(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("ハンド!ハンド!今絶対手で触ったって!")
End Sub
Private Sub eventSender_ValueUpdated_2(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("ハン㌦!(゚∀゚ )( ゚∀゚)ハン㌦!")End Sub
End Class