이 예제는 이벤트를 사용하여 100 미터 최고 기록 경주가 진행되는 동안 초 단위의 시간을 측정합니다. 아래 코드는 Event 문과 모든 이벤트 관련 메서드, 속성, 명령문을 보여줍니다.
이벤트를 발생하는 클래스는 이벤트 원본이고 이벤트를 실행하는 클래스는 싱크입니다. 이벤트 원본은 이벤트가 생성하는 다중 싱크를 가집니다. 클래스가 이벤트를 생성할 때 개체의 인스턴스를 위해 이벤트를 받도록 선택된 모든 클래스에서 이벤트가 발생합니다.
이 예제는 또한 단추(Command1)가 있는 폼(Form1)과 레이블(Label1) 그리고 두개의 입력란(Text1과 Text2)를 사용합니다. 단추를 누르면 Text1이 "시작"을 표시하고 Text2가 초 단위 시간 측정을 시작합니다. 시간이 풀 타임(9.84초)까지 경과하면 Text1이 "완료"를 표시하고 Text2가 9.84를 기록합니다.
Form1 코드는 폼의 초기와 마지막 상태를 지정합니다. 이 코드에는 이벤트가 발생할 때 실행되는 코드가 포함됩니다
Option Explicit
Private WithEvents mText As TimerState
Private Sub Command1_Click()
Text1.Text = "시작"
Text1.Refresh
Text2.Text = "0"
Text2.Refresh
Call mText.TimerTask(9.84)
End Sub
Private Sub Form_Load()
Command1.Caption = "시작 타이머를 누르십시오"
Text1.Text = ""
Text2.Text = ""
Label1.Caption = "100 미터 최고 기록 경주의 경과 시간:"
Set mText = New TimerState
End Sub
Private Sub mText_ChangeText() ' Event에 정의되어 있음.
Text1.Text = "완료"
Text2.Text = "9.84"
End Sub
Private Sub mText_UpdateTime(ByVal dblJump As Double) ' Event에 정의
Text2.Text = Str(Format(dblJump, "0"))
DoEvents
End Sub
나머지 코드는 TimerState라는 클래스 모듈에 있습니다. Event 문은 이벤트가 발생할 때 초기화된 프로시저를 선언합니다.
Option Explicit
Public Event UpdateTime(ByVal dblJump As Double)
Public Event ChangeText()
Public Sub TimerTask(ByVal Duration As Double)
Dim dblStart As Double
Dim dblSecond As Double
Dim dblSoFar As Double
dblStart = Timer
dblSoFar = dblStart
Do While Timer < dblStart + Duration
If Timer - dblSoFar >= 1 Then
dblSoFar = dblSoFar + 1
RaiseEvent UpdateTime(Timer - dblStart)
End If
Loop
RaiseEvent ChangeText
End Sub