Из MSDN'а Event Statement ExampleThe following example uses events to count off seconds during a demonstration of the fastest 100 meter race. The code illustrates all of the event-related methods, properties, and statements, including the Event statement. The class that raises an event is the event source, and the classes that implement the event are the sinks. An event source can have multiple sinks for the events it generates. When the class raises the event, that event is fired on every class that has elected to sink events for that instance of the object. The example also uses a form (Form1 ) with a button (Command1 ), a label (Label1 ), and two text boxes (Text1 and Text2 ). When you click the button, the first text box displays "From Now" and the second starts to count seconds. When the full time (9.84 seconds) has elapsed, the first text box displays "Until Now" and the second displays "9.84" The code for Form1 specifies the initial and terminal states of the form. It also contains the code executed when events are raised. Option ExplicitPrivate WithEvents mText As TimerStatePrivate Sub Command1_Click()Text1.Text = "From Now" Text1.Refresh Text2.Text = "0" Text2.RefreshCall mText.TimerTask(9.84)End SubPrivate Sub Form_Load() Command1.Caption = "Click to Start Timer" Text1.Text = "" Text2.Text = "" Label1.Caption = "The fastest 100 meter run took this long:" Set mText = New TimerState End SubPrivate Sub mText_ChangeText() Text1.Text = "Until Now" Text2.Text = "9.84"End SubPrivate Sub mText_UpdateTime(ByVal dblJump As Double) Text2.Text = Str(Format(dblJump, "0")) DoEventsEnd Sub
The remaining code is in a class module named TimerState. The Event statements declare the procedures initiated when events are raised. Option ExplicitPublic 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
Ответить
|