イベントの順序
「そんな作り方すんなよ!!」ってツッコミは無しで。
あるイベントに複数のメソッドをハンドルさせた場合、そのメソッドが呼ばれる順序はどこで決まるのだろうか?
昨日上司に聞かれたのだが答えられなかった。
Private Sub Button_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click MsgBox("1") End Sub Private Sub Button_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click MsgBox("2") End Sub Private Sub Button_3(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button.Click MsgBox("3") End Sub
この場合順序は不定・・・というかどうやって順序が決まっているのかよくわからない。
上に書いてあるメソッドから実行されるわけでもない。
これの順序を自分で決めたい、と上司は言っているわけだ。
というわけで試してみたのがこれ
Private Sub Form_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load AddHandler Button.Click, AddressOf Button_1 AddHandler Button.Click, AddressOf Button_2 AddHandler Button.Click, AddressOf Button_3 End Sub Private Sub Button_1(ByVal sender As System.Object, ByVal e As System.EventArgs) MsgBox("1") End Sub Private Sub Button_2(ByVal sender As System.Object, ByVal e As System.EventArgs) MsgBox("2") End Sub Private Sub Button_3(ByVal sender As System.Object, ByVal e As System.EventArgs) MsgBox("3") End Sub
こうするとAddHandlerした順序に呼ばれるようだ。
といっても、ちょっと試しただけなのでたまたまそう動いているだけかもしれない。
何よりMSDNにこれを裏付ける記述が見当たらない。
何か知ってる人いたら教えてください。