다음을 통해 공유


AddHandler 문

런타임에 이벤트를 이벤트 처리기와 연결합니다.

문법

AddHandler event, {AddressOf eventhandler | expression }

부분

부분 설명
event 처리할 이벤트의 이름입니다.
eventhandler 이벤트를 처리하는 프로시저의 이름입니다.
expression 이벤트를 처리하는 람다 식입니다.

파트 AddressOf eventhandlerexpression 상호 배타적입니다.

비고

AddHandlerRemoveHandler 문을 사용하면 프로그램 실행 중에 언제든지 이벤트 처리를 시작하고 중지할 수 있습니다.

새 이벤트 처리기( eventhandler 프로시저 또는 expression 람다)의 서명은 이벤트의 event서명과 일치해야 합니다.

Handles 키워드와 AddHandler 문은 모두 특정 프로시저가 특정 이벤트를 처리하도록 지정할 수 있지만 차이점이 있습니다. 이 문은 AddHandler 런타임에 프로시저를 이벤트에 연결합니다. 프로시저를 Handles 정의할 때 키워드를 사용하여 특정 이벤트를 처리하도록 지정합니다. 자세한 내용은 핸들을 참조하세요.

명시적 람다를 사용하여 추가된 처리기는 나중에 제거할 수 없습니다(사용 RemoveHandler). 실제로 람다에 이름이 지정되지 않은 경우 나중에 참조할 수 없습니다. 그러나 변수에 람다를 할당하고 이 변수를 통해 처리기를 추가하면 이 변수를 사용하여 처리기를 제거할 수 있습니다.

비고

사용자 지정 이벤트의 경우 이 문은 AddHandler 이벤트의 AddHandler 접근자를 호출합니다. 사용자 지정 이벤트에 대한 자세한 내용은 Event Statement를 참조하세요.

예시

다음 예제에서는 데이터 바인딩 시나리오에 대리자를 사용하는 AddHandlerConvertEventHandler 방법을 보여 줍니다. 이 예제에서는 이벤트 처리기가 연결된 Format 실제 사용 사례와 10진수 값과 Parse 통화 문자열 간에 변환할 개체의 Binding 이벤트를 보여 줍니다.

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

이 예에서는 다음 내용을 설명합니다.

  • 데이터 바인딩을 Binding 위한 개체 만들기
  • 및 이벤트에 대리자를 연결하는 ConvertEventHandlerFormatParse 사용합니다AddHandler.
  • 10진수 및 통화 문자열 형식을 변환하는 이벤트 처리기 메서드 구현
  • 사용자 지정 이벤트 및 람다 식의 기본 AddHandler 사용.

참고하십시오