我已经将一个大的VB6移植到VB.NET项目,虽然它将正确编译,但我必须注释掉大多数事件处理程序,因为绕过没有winform对象的数组集合,所以把各种对象放到在集合数组中进入List对象. 例如,在
例如,在VB6中,您可以拥有一组按钮.在我的代码中,我有
Dim WithEvents cmdButtons As New List(Of Button)
(并在Load事件中传播List)
显然,您无法在容器上触发事件.是否有办法从容器的内容(具有不同的名称)中触发事件?
在Button创建代码中,事件名称就在那里,但据我所知,处理程序不会拦截,因为Handles部分代码不存在(注释掉).
我不确定你在追求什么,但是如果你想能够将事件处理程序添加到容器中的某些按钮并且还在列表中引用这些按钮,你可以做类似的事情.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
