我将使用property来保存click sub的地址,然后将其分配给AddRow()子句中的每个按钮。出现以下错误时出现问题:
错误1
方法'公共属性ClickEvent As Button_Click'没有 签名与委托'Delegate Sub EventHandler(发件人)兼容 As Object,e As System.EventArgs)'。
Private Sub Button_Click(sender As Object, e As EventArgs)
'do somthing
End Sub
Class CustomClass
Public Fields As New List(Of FieldsDefinition)()
Class FieldsDefinition
Public Delegate Sub Button_Click(sender As System.Object, e As System.EventArgs)
Public __ClickEventValue As Button_Click
Public Property ClickEvent() As Button_Click
Get
Return __ClickEventValue
End Get
Set(ByVal value As Button_Click)
__ClickEventValue = value
End Set
End Property
End Class
Public Sub AddRow()
For Each field As FieldsDefinition In Fields
Dim ctrl As New TextBox
AddHandler ctrl.Click, AddressOf field.ClickEvent
Next
End Sub
End Class
答案 0 :(得分:0)
2个变化:
删除AddressOf
,因为您不希望处理程序成为ClickEvent
属性本身,您希望它是返回的委托。
AddHandler
会期望类型为EventHandler
的处理程序。因此,请删除Button_Click
委托声明,并用EventHandler
替换对它的任何引用。
代码:
Private Sub Button_Click(sender As Object, e As EventArgs)
'do somthing
End Sub
Class CustomClass
Public Fields As New List(Of FieldsDefinition)()
Class FieldsDefinition
' removed Button_Click delegate declaration here
Public __ClickEventValue As EventHandler 'changed Button_Click to EventHandler here
Public Property ClickEvent() As EventHandler 'changed Button_Click to EventHandler here
Get
Return __ClickEventValue
End Get
Set(ByVal value As EventHandler) 'changed Button_Click to EventHandler here
__ClickEventValue = value
End Set
End Property
End Class
Public Sub AddRow()
For Each field As FieldsDefinition In Fields
Dim ctrl As New TextBox
AddHandler ctrl.Click, field.ClickEvent 'removed AddressOf here
Next
End Sub
End Class