2016-07-30 58 views
0

我将使用属性来保留click子地址,然后将其分配给AddRow()子中的每个按钮。出现问题时,我得到了以下错误:保留属性中的子地址

错误1

Method 'Public Property ClickEvent As Button_Click' does not have a signature compatible with delegate 'Delegate Sub EventHandler(sender 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

2点的变化:

  1. 取出AddressOf,因为你不希望处理程序成为ClickEvent属性本身,您希望它成为返回的委托。

  2. 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 
+0

Thanks.It工作这么好! –