Freigeben über


AddHandler-Anweisung

Ordnet ein Ereignis einem Ereignishandler zur Laufzeit zu.

Syntax

AddHandler event, {AddressOf eventhandler | expression }

Bestandteile

Teil BESCHREIBUNG
event Der Name des zu behandelnden Ereignisses.
eventhandler Der Name einer Prozedur, die das Ereignis behandelt.
expression Ein Lambda-Ausdruck, der das Ereignis behandelt.

Die Teile AddressOf eventhandler schließen expression sich gegenseitig aus.

Bemerkungen

Mit den AddHandler Anweisungen RemoveHandler können Sie die Ereignisbehandlung während der Programmausführung jederzeit starten und beenden.

Die Signatur des neuen Ereignishandlers (die eventhandler Prozedur oder expression lambda) muss mit der Signatur des Ereignisses eventübereinstimmen.

Mit dem Handles Schlüsselwort und der AddHandler Anweisung können Sie angeben, dass bestimmte Prozeduren bestimmte Ereignisse behandeln, es gibt jedoch Unterschiede. Die AddHandler Anweisung verbindet Prozeduren zur Laufzeit mit Ereignissen. Verwenden Sie das Handles Schlüsselwort beim Definieren einer Prozedur, um anzugeben, dass es ein bestimmtes Ereignis behandelt. Weitere Informationen finden Sie unter Handles.

Ein Handler, der mit einer expliziten Lambda-Funktion hinzugefügt wurde, kann später (mithilfe von RemoveHandler) nicht entfernt werden. Wenn die Lambda-Funktion keinen Namen erhält, ist es nicht möglich, später darauf zu verweisen. Das Zuweisen der Lambda-Funktion zu einer Variablen und das Hinzufügen des Handlers über diese Variable ermöglicht jedoch das Entfernen des Handlers mithilfe dieser Variablen.

Hinweis

Bei benutzerdefinierten Ereignissen ruft die AddHandler Anweisung den Accessor des Ereignisses AddHandler auf. Weitere Informationen zu benutzerdefinierten Ereignissen finden Sie unter Event Statement.

Beispiel

Im folgenden Beispiel wird die Verwendung AddHandler mit ConvertEventHandler Stellvertretungen für Datenbindungsszenarien veranschaulicht. Dieses Beispiel zeigt einen praktischen Anwendungsfall, bei dem Ereignishandler an und Parse Ereignisse eines Binding Objekts angefügt Format sind, um zwischen Dezimalwerten und Währungszeichenfolgen zu konvertieren.

Public Class DataBindingExample
    Private textBox1 As TextBox
    Private ds As DataSet
    
    Public Sub New()
        textBox1 = New TextBox()
        ds = New DataSet()
        SetupSampleData()
        BindControlWithAddHandler()
    End Sub
    
    Private Sub SetupSampleData()
        Dim table As New DataTable("Orders")
        table.Columns.Add("OrderAmount", GetType(Decimal))
        table.Rows.Add(123.45D)
        table.Rows.Add(67.89D)
        ds.Tables.Add(table)
    End Sub
    
    Private Sub BindControlWithAddHandler()
        Dim binding As New Binding("Text", ds, "Orders.OrderAmount")
        
        ' Use AddHandler to associate ConvertEventHandler delegates
        AddHandler binding.Format, AddressOf DecimalToCurrency
        AddHandler binding.Parse, AddressOf CurrencyToDecimal
        
        textBox1.DataBindings.Add(binding)
    End Sub
    
    Private Sub DecimalToCurrency(ByVal sender As Object, ByVal e As ConvertEventArgs)
        If e.DesiredType IsNot GetType(String) Then
            Return
        End If
        e.Value = CDec(e.Value).ToString("c")
    End Sub
    
    Private Sub CurrencyToDecimal(ByVal sender As Object, ByVal e As ConvertEventArgs)
        If e.DesiredType IsNot GetType(Decimal) Then
            Return
        End If
        e.Value = Convert.ToDecimal(e.Value.ToString())
    End Sub
End Class

' Simple example for basic AddHandler usage
Sub TestBasicEvents()
    Dim Obj As New Class1
    AddHandler Obj.Ev_Event, AddressOf EventHandler
    Obj.CauseSomeEvent()
    RemoveHandler Obj.Ev_Event, AddressOf EventHandler
    Obj.CauseSomeEvent()
    
    ' Lambda expression example
    AddHandler Obj.Ev_Event, Sub ()
        MsgBox("Lambda caught event.")
    End Sub
    Obj.CauseSomeEvent()
End Sub

Sub EventHandler()
    MsgBox("EventHandler caught event.")
End Sub

Public Class Class1
    Public Event Ev_Event()
    Sub CauseSomeEvent()
        RaiseEvent Ev_Event()
    End Sub
End Class

Dieses Beispiel zeigt:

  • Erstellen eines Binding Objekts für die Datenbindung.
  • Wird AddHandler verwendet, um Stellvertretungen an die Format Ereignisse und Parse Ereignisse anzufügenConvertEventHandler.
  • Implementieren von Ereignishandlermethoden, die zwischen Dezimal- und Währungszeichenfolgenformaten konvertiert werden.
  • Grundlegende AddHandler Verwendung mit benutzerdefinierten Ereignissen und Lambda-Ausdrücken.

Siehe auch