次の例はイベントを使用して、10 秒から 0 秒までカウント ダウンします。このコードには、RaiseEvent ステートメントなど、イベントに関連するメソッド、プロパティ、およびステートメントの使い方を示す例がいくつも含まれています。
イベントを発生させるクラスをイベント ソース、イベントを処理するメソッドをイベント ハンドラと呼びます。イベント ソースには、そこで生成される複数のイベント ハンドラを設定できます。クラスでイベントが発生すると、そのイベントは、オブジェクトのインスタンスに対するイベントを処理するために選択されたすべてのクラスで発生します。
また、このコード例では、ボタン (Button1) および テキスト ボックス (TextBox1) のあるフォーム (Form1) を使用します。ボタンをクリックすると、10 秒から 0 秒までカウント ダウンする最初のテキスト ボックスが表示されます。カウント時間 (10 秒) が経過すると、最初のテキスト ボックスに "Done" と表示されます。
Form1 のコードでは、フォームの初期状態と終了状態を指定します。イベント発生時に実行されるコードも含まれます。
この例を使用するには、新しい Windows Forms プロジェクトを開きます。次に、Button1 という名前のボタンと TextBox1 という名前のテキスト ボックスを、Form1 という名前のメイン フォームに追加します。続いてフォームを右クリックし、[コードの表示] をクリックして、コード エディタを開きます。
Form1 クラスの宣言セクションに、WithEvents 変数を追加します。
Private WithEvents mText As TimerState
Form1 のコードに以下のコードを追加します。Form_Load や Button_Click など、重複して存在する可能性のあるプロシージャを置き換えます。
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) _
Handles MyBase.Load
Button1.Text = "Start"
mText = New TimerState
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
mText.StartCountdown(10.0, 0.1)
End Sub
Private Sub mText_ChangeText() Handles mText.Finished
TextBox1.Text = "Done"
End Sub
Private Sub mText_UpdateTime(ByVal Countdown As Double) _
Handles mText.UpdateTime
TextBox1.Text = Format(Countdown, "##0.0")
' Use DoEvents to allow the display to refresh.
My.Application.DoEvents()
End Sub
Class TimerState
Public Event UpdateTime(ByVal Countdown As Double)
Public Event Finished()
Public Sub StartCountdown(ByVal Duration As Double, _
ByVal Increment As Double)
Dim Start As Double = DateAndTime.Timer
Dim ElapsedTime As Double = 0
Dim SoFar As Double = 0
Do While ElapsedTime < Duration
If ElapsedTime > SoFar + Increment Then
SoFar += Increment
RaiseEvent UpdateTime(Duration - SoFar)
End If
ElapsedTime = DateAndTime.Timer - Start
Loop
RaiseEvent Finished()
End Sub
End Class
F5 キーを押してコード例を実行し、[Start] というラベルのボタンをクリックします。最初のテキスト ボックスが、秒のカウント ダウンを開始します。カウント時間 (10 秒) が経過すると、最初のテキスト ボックスに "Done" と表示されます。
メモ : |
|---|
| My.Application.DoEvents メソッドがイベントを処理する方法は、フォームとすべて同じではありません。To allow the form to handle the events directly, you can use multithreading.詳細については、「Visual Basic におけるマルチスレッド」を参照してください。 |