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


koto  2013-09-19 05:01:59  No: 148224

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


魔界の仮面弁士  2013-09-19 23:28:15  No: 148225

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 で利用できるようになるというメリットがあります。


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加