다음을 통해 공유


Event 문

사용자 정의 이벤트를 선언합니다.

문법

[ <attrlist> ] [ accessmodifier ] _  
[ Shared ] [ Shadows ] Event eventname[(parameterlist)] _  
[ Implements implementslist ]  
' -or-  
[ <attrlist> ] [ accessmodifier ] _  
[ Shared ] [ Shadows ] Event eventname As delegatename _  
[ Implements implementslist ]  
' -or-  
 [ <attrlist> ] [ accessmodifier ] _  
[ Shared ] [ Shadows ] Custom Event eventname As delegatename _  
[ Implements implementslist ]  
   [ <attrlist> ] AddHandler(ByVal value As delegatename)  
      [ statements ]  
   End AddHandler  
   [ <attrlist> ] RemoveHandler(ByVal value As delegatename)  
      [ statements ]  
   End RemoveHandler  
   [ <attrlist> ] RaiseEvent(delegatesignature)  
      [ statements ]  
   End RaiseEvent  
End Event  

부분

부분 설명
attrlist 선택 사항입니다. 이 이벤트에 적용되는 특성 목록입니다. 여러 특성은 쉼표로 구분됩니다. 특성 목록을 꺾쇠 괄호("" 및 "<>")로 묶어야 합니다.
accessmodifier 선택 사항입니다. 이벤트에 액세스할 수 있는 코드를 지정합니다. 다음 중 하나일 수 있습니다.

- Public - 선언하는 요소에 액세스할 수 있는 모든 코드는 액세스할 수 있습니다.
- Protected - 해당 클래스 또는 파생 클래스 내의 코드만 액세스할 수 있습니다.
- Friend - 동일한 어셈블리의 코드만 액세스할 수 있습니다.
- Private - 이를 선언하는 요소의 코드만 액세스할 수 있습니다.
- 이벤트 클래스, 파생 클래스 또는 동일한 어셈블리의 보호된 Friend 전용 코드가 액세스할 수 있습니다.
- 이벤트의 클래스 또는 동일한 어셈블리의 파생 클래스에 있는 Private Protected 전용 코드가 액세스할 수 있습니다.
Shared 선택 사항입니다. 이 이벤트가 클래스 또는 구조체의 특정 인스턴스와 연결되지 않도록 지정합니다.
Shadows 선택 사항입니다. 이 이벤트는 기본 클래스에서 동일한 이름의 프로그래밍 요소 또는 오버로드된 요소 집합을 다시 선언하고 숨깁니다. 선언된 모든 종류의 요소를 다른 종류로 숨기면 됩니다.

그림자 요소에 액세스할 수 없는 경우를 제외하고 그림자 요소를 숨기는 파생 클래스 내에서는 그림자 요소를 사용할 수 없습니다. 예를 들어 요소가 기본 클래스 요소를 숨기면 Private 요소에 액세스할 Private 수 있는 권한이 없는 코드가 대신 기본 클래스 요소에 액세스합니다.
eventname 필수 사항입니다. 이벤트의 이름입니다. 는 표준 변수 명명 규칙을 따릅니다.
parameterlist 선택 사항입니다. 이 이벤트의 매개 변수를 나타내는 지역 변수 목록입니다. 매개 변수 목록을 괄호로 묶어야 합니다.
Implements 선택 사항입니다. 이 이벤트가 인터페이스의 이벤트를 구현한다는 것을 나타냅니다.
implementslist 제공된 경우 Implements 필수입니다. Sub 구현되는 프로시저 목록입니다. 여러 프로시저는 쉼표로 구분됩니다.

implementedprocedure [ , implementedprocedure ... ]

각각 implementedprocedure 에는 다음과 같은 구문과 부분이 있습니다.

interface.definedname

- interface -필수. 이 프로시저에서 클래스 또는 구조체를 포함하는 인터페이스의 이름입니다.
- Definedname -필수. 프로시저가 정의 interface되는 이름입니다. 이 프로시저가 정의된 프로시저를 구현하는 데 사용하는 이름과 같 name을 필요는 없습니다.
Custom 필수 사항입니다. 선언된 Custom 이벤트는 사용자 지정 AddHandlerRemoveHandlerRaiseEvent 접근자를 정의해야 합니다.
delegatename 선택 사항입니다. 이벤트 처리기 서명을 지정하는 대리자의 이름입니다.
AddHandler 필수 사항입니다. AddHandler 문을 명시적으로 사용하거나 절을 사용하여 AddHandlerHandles 암시적으로 이벤트 처리기를 추가할 때 실행할 문을 지정하는 접근자를 선언합니다.
End AddHandler 필수 사항입니다. 블록을 종료합니다 AddHandler .
value 필수 사항입니다. 매개 변수 이름입니다.
RemoveHandler 필수 사항입니다. RemoveHandler 문을 사용하여 RemoveHandler 이벤트 처리기를 제거할 때 실행할 문을 지정하는 접근자를 선언합니다.
End RemoveHandler 필수 사항입니다. 블록을 종료합니다 RemoveHandler .
RaiseEvent 필수 사항입니다. RaiseEvent 문을 사용하여 이벤트가 발생할 때 실행할 문을 지정하는 접근자를 RaiseEvent 선언합니다. 일반적으로 이 작업은 및 RemoveHandler 접근자가 유지 관리하는 AddHandler 대리자 목록을 호출합니다.
End RaiseEvent 필수 사항입니다. 블록을 종료합니다 RaiseEvent .
delegatesignature 필수 사항입니다. 대리자가 요구하는 매개 변수와 일치하는 매개 변수 목록입니다 delegatename . 매개 변수 목록을 괄호로 묶어야 합니다.
statements 선택 사항입니다. 및 메서드의 AddHandlerRemoveHandlerRaiseEvent 본문을 포함하는 문입니다.
End Event 필수 사항입니다. 블록을 종료합니다 Event .

비고

이벤트가 선언되면 문을 사용하여 RaiseEvent 이벤트를 발생합니다. 일반적인 이벤트는 다음 조각과 같이 선언되고 발생할 수 있습니다.

Public Class EventSource
    ' Declare an event.
    Public Event LogonCompleted(ByVal UserName As String)
    Sub CauseEvent()
        ' Raise an event on successful logon.
        RaiseEvent LogonCompleted("AustinSteele")
    End Sub
End Class

비고

다음과 같은 예외를 제외하고 프로시저의 인수와 마찬가지로 이벤트 인수를 선언할 수 있습니다. 이벤트에는 명명된 인수, ParamArray 인수 또는 Optional 인수가 있을 수 없습니다. 이벤트에는 반환 값이 없습니다.

이벤트를 처리하려면 또는 AddHandler 문을 사용하여 Handles 이벤트 처리기 서브루틴과 연결해야 합니다. 서브루틴 및 이벤트의 서명이 일치해야 합니다. 공유 이벤트를 처리하려면 문을 사용해야 AddHandler 합니다.

모듈 수준에서만 사용할 Event 수 있습니다. 즉, 이벤트에 대한 선언 컨텍스트 는 클래스, 구조체, 모듈 또는 인터페이스여야 하며 소스 파일, 네임스페이스, 프로시저 또는 블록일 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준을 참조하세요.

대부분의 경우 이 항목의 구문 섹션에 있는 첫 번째 구문을 사용하여 이벤트를 선언할 수 있습니다. 그러나 일부 시나리오에서는 이벤트의 자세한 동작을 더 자세히 제어해야 합니다. 키워드를 사용하는 Custom 이 항목의 구문 섹션에 있는 마지막 구문은 사용자 지정 이벤트를 정의할 수 있도록 하여 해당 컨트롤을 제공합니다. 사용자 지정 이벤트에서 코드에서 이벤트 처리기를 추가 또는 제거할 때 또는 코드가 이벤트를 발생 시에 정확히 지정 합니다. 예를 들어 방법 : 메모리를 절약하기 위해 사용자 지정 이벤트 선언방법: 차단을 방지하기 위해 사용자 지정 이벤트 선언을 참조하세요.

예시

다음 예제에서는 이벤트를 사용하여 10에서 0까지의 초를 카운트다운합니다. 이 코드는 여러 이벤트 관련 메서드, 속성 및 문을 보여 줍니다. 여기에는 문이 포함됩니다 RaiseEvent .

이벤트를 발생시키는 클래스는 이벤트 원본이며 이벤트를 처리하는 메서드는 이벤트 처리기입니다. 이벤트 원본에는 생성하는 이벤트에 대한 여러 처리기가 있을 수 있습니다. 클래스가 이벤트를 발생시키는 경우 해당 이벤트는 개체의 해당 인스턴스에 대한 이벤트를 처리하도록 선택한 모든 클래스에서 발생합니다.

이 예제에서는 단추()와 텍스트 상자(Form1)가 있는 폼(Button1TextBox1)도 사용합니다. 단추를 클릭하면 첫 번째 텍스트 상자에 10초에서 0초까지의 카운트다운이 표시됩니다. 전체 시간(10초)이 경과하면 첫 번째 텍스트 상자에 "완료"가 표시됩니다.

양식의 초기 및 터미널 상태를 지정하는 코드 Form1 입니다. 또한 이벤트가 발생할 때 실행되는 코드도 포함합니다.

이 예제를 사용하려면 새 Windows Forms 프로젝트를 엽니다. 그런 다음 명명 Button1 된 단추와 기본 폼Form1에 이름이 지정된 TextBox1 텍스트 상자를 추가합니다. 그런 다음 폼을 마우스 오른쪽 단추로 클릭하고 코드 보기를 클릭하여 코드 편집기를 엽니다.

클래스의 WithEvents 선언 섹션에 변수를 Form1 추가합니다.

Public Class TimerExample
    Private WithEvents mTimer As TimerState

에 대한 코드에 다음 코드를 추가합니다 Form1. 존재할 수 있는 중복 프로시저(예: )를 Form_Load 대체합니다 Button_Click.

    Public Sub StartCountdownExample()
        mTimer = New TimerState()
        mTimer.StartCountdown(10.0, 1.0)
    End Sub

    Private Sub mTimer_UpdateTime(ByVal Countdown As Double) Handles mTimer.UpdateTime
        Console.WriteLine("Time remaining: " & Format(Countdown, "##0.0") & " seconds")
    End Sub

    Private Sub mTimer_Finished() Handles mTimer.Finished
        Console.WriteLine("Done")
    End Sub
End Class

Public Class TimerState
    Public Event UpdateTime(ByVal Countdown As Double)
    Public Event Finished()
    Public Sub StartCountdown(ByVal Duration As Double,
                              ByVal Increment As Double)
        Dim SoFar As Double = 0
        Do While SoFar < Duration
            System.Threading.Thread.Sleep(CInt(Increment * 1000))
            SoFar += Increment
            RaiseEvent UpdateTime(Duration - SoFar)
        Loop
        RaiseEvent Finished()
    End Sub
End Class

F5 키를 눌러 이전 예제를 실행하고 시작 레이블이 지정된 단추를 클릭합니다. 첫 번째 텍스트 상자는 초를 카운트다운하기 시작합니다. 전체 시간(10초)이 경과하면 첫 번째 텍스트 상자에 "완료"가 표시됩니다.

비고

메서드는 My.Application.DoEvents 폼과 동일한 방식으로 이벤트를 처리하지 않습니다. 폼에서 이벤트를 직접 처리할 수 있도록 하려면 다중 스레딩을 사용할 수 있습니다. 자세한 내용은 관리되는 스레딩을 참조하세요.

참고하십시오