다음을 통해 공유


RaiseEvent 문

클래스, 폼 또는 문서 내의 모듈 수준에서 선언된 이벤트를 트리거합니다.

문법

RaiseEvent eventname[( argumentlist )]  

부분

eventname
필수 사항입니다. 트리거할 이벤트의 이름입니다.

argumentlist
선택 사항입니다. 변수, 배열 또는 식의 쉼표로 구분된 목록입니다. 인수는 argumentlist 괄호로 묶어야 합니다. 인수가 없으면 괄호를 생략해야 합니다.

비고

필수 eventname 는 모듈 내에서 선언된 이벤트의 이름입니다. Visual Basic 변수 명명 규칙을 따릅니다.

이벤트가 발생한 모듈 내에서 이벤트가 선언되지 않은 경우 오류가 발생합니다. 다음 코드 조각에서는 이벤트 선언 및 이벤트가 발생하는 프로시저를 보여 줍니다.

' Declare an event at module level.
Event LogonCompleted(ByVal UserName As String)

Sub Logon(ByVal UserName As String)
    ' Raise the event.
    RaiseEvent LogonCompleted(UserName)
End Sub

모듈에서 명시적으로 선언되지 않은 이벤트를 발생시키는 데 사용할 RaiseEvent 수 없습니다. 예를 들어 모든 양식에서 ClickSystem.Windows.Forms.Form이벤트를 상속하며 파생된 폼을 사용하여 RaiseEvent 발생될 수 없습니다. 폼 모듈에서 이벤트를 선언 Click 하면 폼의 자체 Click 이벤트가 숨깁니다. 메서드를 호출하여 양식의 Click 이벤트를 호출할 OnClick 수 있습니다.

기본적으로 Visual Basic에 정의된 이벤트는 연결이 설정되는 순서대로 이벤트 처리기를 발생합니다. 이벤트에는 매개 변수가 있을 ByRef 수 있으므로 늦게 연결하는 프로세스는 이전 이벤트 처리기에 의해 변경된 매개 변수를 수신할 수 있습니다. 이벤트 처리기가 실행되면 이벤트를 발생시킨 서브루틴으로 컨트롤이 반환됩니다.

비고

공유되지 않은 이벤트는 선언된 클래스의 생성자 내에서 발생해서는 안 됩니다. 이러한 이벤트로 인해 런타임 오류가 발생하지는 않지만 연결된 이벤트 처리기에서 catch하지 못할 수 있습니다. Shared 생성자에서 이벤트를 발생시켜야 하는 경우 한정자를 사용하여 공유 이벤트를 만듭니다.

비고

사용자 지정 이벤트를 정의하여 이벤트의 기본 동작을 변경할 수 있습니다. 사용자 지정 이벤트의 경우 이 문은 RaiseEvent 이벤트의 RaiseEvent 접근자를 호출합니다. 사용자 지정 이벤트에 대한 자세한 내용은 Event Statement를 참조하세요.

예제 1

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

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

이 예제에서는 10초에서 0초까지 카운트다운하고 콘솔에 대한 진행률을 표시하는 타이머를 보여 줍니다. 카운트다운이 완료되면 "완료"가 표시됩니다.

타이머의 WithEvents 이벤트를 처리하도록 클래스에서 변수를 선언합니다.

Public Class TimerExample
    Private WithEvents mTimer As TimerState

예제 2

다음 코드를 추가하여 이벤트 처리기 및 타이머 논리를 구현합니다. 이 예제에서는 타이머가 RaiseEvent 업데이트되거나 완료되면 문을 사용하여 이벤트 처리기에 알리는 방법을 보여 줍니다.

    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

앞의 예제를 실행하면 10에서 0까지의 초를 카운트다운하여 콘솔에 대한 진행률을 표시합니다. 전체 시간(10초)이 경과하면 "완료"가 표시됩니다.

참고하십시오