Mr.Tです、こんにちは。
ネタ元:Visual Basic でなんとなくイベントとデリゲート その2。 - イベント ハンドラ -
http://blogs.wankuma.com/torikobito/archive/2007/10/24/103755.aspx
刈歩 菜良さんのコメント
> Handles Button1.Click, Button2.Click
って、複数イベントをはっつけた時、イベントの発生順序はどうなりますか?
発生順に関しては、AddHandlerで行った場合、その行った順番でイベントが発生します。
addHandler Button1.click addressof Test1
addHandler Button1.click addressof Test2
addHandler Button1.click addressof Test3
この場合は、Test1()→Test2()→Test3()と実行されます。
また、
addHandler Button1.click addressof Test1
addHandler Button1.click addressof Test1
と二回登録した場合は、二回Test1 が実行されます。
さらに、Test1に対して、Handles Button1.cllickと書くと、都合3回実行されることになります。
この状態でRemoveHandler Button1.Click ,addressof Test1を行うと、登録されているものが一つだけなくなります。
今度は全く実行されません。
これは直前に登録されたものを引っぺがすのではなく、全てざっくりなくなります。
これは内部でListとして扱われているため、登録されたものが一つだけなくなります。
さて、Handlesで行った場合は、希望通りの実行はされません。
Private Sub C004(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("No1")
End Sub
Private Sub B002(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("No2")
End Sub
Private Sub B003(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
MsgBox("No3")
End Sub
私のマシン、No3→No1→No2でした。
#希望通りに行う方法があるのかどうかはちょっとわかりませんでした。
コンパイル時にAddHandlerのように登録順番が勝手に決められているのであれば、コンパイルしなおせば順番がかわるのか、
と思いきや変化しませんでした。
なんちゅうか、こっちが指定できない順番が、ソースをコンパイルした時点で変更できないような形で出来上がっているような印象です。
#おそらく、ここらへんはとりこびっちさんは「あたりめーだろ」的にスルーしてくれて、
#Hanldlesで指定したときの順番がどうやって決められているか、について追記してくれるに違いない。
#2007/11/27追記 間違いがあったため修正