2016-07-30 14 views
0

Ich werde die Eigenschaft verwenden, um die Adresse des Klick-Sub zu behalten und sie dann jeder Schaltfläche in AddRow() sub zuzuordnen. Das Problem trat auf, wenn ich die folgende Fehlermeldung anzeigt:Behalten Sie die Adresse des Unterobjekts in der Eigenschaft

Fehler 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 

Antwort

0

2 Änderungen:

  1. die AddressOf entfernen, da der Handler nicht wollen Um die Eigenschaft ClickEvent selbst zu sein, möchten Sie, dass es sich um den zurückgegebenen Delegaten handelt.

  2. AddHandler erwartet einen Handler des Typs EventHandler. Entfernen Sie daher die Button_Click Delegatendeklaration, und ersetzen Sie alle Verweise darauf durch EventHandler.

Code:

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 funktionierte so gut! –