5

我已经将一个大型 VB6 移植到 VB.NET 项目,虽然它可以正确编译,但我不得不注释掉大多数事件处理程序,以避开没有用于 winform 对象的数组集合,因此将各种对象放入分别在集合数组中放入一个List对象。

例如,在 VB6 中,您可以有一个 Button 数组。在我的代码中,我有

Dim WithEvents cmdButtons As New List(Of Button) 

(并且在 Load 事件中,传播列表)

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

在按钮创建代码中,事件名称在那里,但据我了解,处理程序不会拦截,因为代码的句柄部分不存在(注释掉)。

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 回答