在VB.NET中从List(Of T)中引发事件

时间:2013-03-21 18:39:42

标签: vb.net

我已经将一个大型VB6移植到VB.NET项目中,虽然它可以正确编译,但我必须注释掉大多数事件处理程序,因为没有winform对象的数组集合所以放置集合数组中的各种对象成为List对象。

例如,在VB6中,您可以拥有一组按钮。在我的代码中我有

Dim WithEvents cmdButtons As New List(Of Button) 

(并在Load事件中,传播List)

显然,您无法在容器上触发事件。是否有办法从容器的内容(具有不同的名称)中触发事件?

在Button创建代码中,事件名称就在那里,但据我所知,处理程序不会拦截,因为代码的Handles部分不存在(注释掉)。

1 个答案:

答案 0 :(得分:4)

我不确定你要追求的是什么,但是如果你想能够将事件处理程序添加到容器中的某些按钮并且还要在List中引用这些按钮,那么你可以执行类似

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