クラスの配列をWithEventsでイベント取得する方法は


koto  2013-09-18 20:01:59  No: 148224  IP: [192.*.*.*]

指定クラスのイベントを、WithEventsを使って取得しています。
WithEvents mm As New Class1
はイベントを取得できますが、
WithEvents mm(10) As New Class1
とすると
'WithEvents' 変数を配列として型指定することはできません。
と表示されてしまいます。
どのようにすれば、配列にしたクラスで、クラスのイベントを取得できるのでしょうか。

編集 削除
魔界の仮面弁士  2013-09-19 14:28:15  No: 148225  IP: [192.*.*.*]

WithEvents + Handles の代わりに、AddHandler ステートメントを使うとか。


Public Class Form1

    Private Buttons(2) As Button

    Private Sub Buttons_Click(sender As Object, e As EventArgs)
        MsgBox(sender.Text)
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Buttons(0) = New Button() With {.Text = "0", .Top = 0}
        Buttons(1) = New Button() With {.Text = "1", .Top = 70}
        Buttons(2) = New Button() With {.Text = "2", .Top = 150}
        Controls.AddRange(Buttons)

        For Each b As Button In Buttons
            AddHandler b.Click, AddressOf Buttons_Click
        Next
    End Sub
End Class



他の方法としては、イベントをコレクション管理できるような中継クラス
(Microsoft.VisualBasic.Compatibility.VB6.ControlArray のようなもの)
を用意するという手もあります。作るのはやや手間ですが、使う側は
WithEvents で利用できるようになるというメリットがあります。

編集 削除