我已经将一个大型 VB6 移植到 VB.NET 项目,虽然它可以正确编译,但我不得不注释掉大多数事件处理程序,以便解决没有用于 winform 对象的数组集合,因此将各种对象放在分别在集合数组中放入一个 List 对象。
例如,在 VB6 中,您可以拥有一组按钮。在我的代码中,我有
Dim WithEvents cmdButtons As New List(Of Button)
Run Code Online (Sandbox Code Playgroud)
(在 Load 事件中,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
Run Code Online (Sandbox Code Playgroud)