5

大規模なVB6をVB.NETプロジェクトに移植しましたが、正しくコンパイルされますが、winformオブジェクトの配列コレクションがないため、さまざまなオブジェクトを配置するために、ほとんどのイベントハンドラーをコメントアウトする必要がありました。コレクション配列でListオブジェクトに含まれていました。

たとえば、VB6では、ボタンの配列を持つことができます。私のコードには

Dim WithEvents cmdButtons As New List(Of Button) 

(そして、Loadイベントでは、リストが伝播されます)

明らかに、コンテナでイベントを発生させることはできません。コンテナの内容(異なる名前を持つ)からイベントを発生させる方法はありますか?

Button作成コードにはイベント名がありますが、コードのHandles部分がない(コメントアウトされている)ため、ハンドラーはインターセプトしません。

4

1 に答える 1

5

何を求めているのか正確にはわかりませんが、コンテナ内のいくつかのボタンにイベントハンドラを追加し、それらのボタンをリストで参照できるようにしたい場合は、次のようにすることができます。

Public Class Form1

    Dim myButtons As List(Of Button)

    Private Sub AddButtonsToList(targetContainer As Control)
        myButtons = New List(Of Button)

        For Each c In targetContainer.Controls
            If TypeOf c Is Button Then
                Dim bn = DirectCast(c, Button)
                AddHandler bn.Click, AddressOf SomeButton_Click
                myButtons.Add(bn)
            End If
        Next
    End Sub

    Private Sub SomeButton_Click(sender As Object, e As EventArgs)
        Dim bn = DirectCast(sender, Button)
        MsgBox("You clicked " & bn.Name)
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' GroupBox1 has some Buttons in it
        AddButtonsToList(GroupBox1)
    End Sub

End Class
于 2013-03-21T19:17:07.930 に答える