|
|
|
4.デリゲートの利用
- タイマーの置き換え
通常のコントロールのタイマー(Timer)を使うに越したことはないのですが、折角デリゲートの機能を覚えたところですから、
このタイマー部分を自分でデリゲートしてみます。
次の手順で既存のタイマーを修正します。
- デザイナでタイマー(Timer)コントロールを削除
- System.Threading クラスをインポート(TimerCallback 利用)
- Timer のオブジェクトを定義
- 既存のtmrScroll_Tick メソッドに Timer を生成時点で実行するようにデリゲート
- Timer を生成(デリゲートに実行指示、タイマー開始)
- 既存のtmrScroll_Tick メソッドの引数をデリゲート定義のシグネーチャに変更
- Timer を削除(タイマー停止)
なおデリゲートの意味が分からない場合は「デリゲートの利用方法」を参照して下さい。
| |
1: Imports System.Threading
2:
3: Public Class Form1 Inherits System.Windows.Forms.Form
4: …
5: Private _timer As Timer ’タイマー
6:
7: Private Sub Form1_Load( … ) Handles MyBase.Load
8: ’---- フォームロード
9: …
10: ’tmrScroll.Start() ’スクロール開始
11: Dim _tmrCallback As TimerCallback _
= New TimerCallback(AddressOf tmrScroll_Tick)
12: Dim _timer As Timer _
= New Timer(_tmrCallback, Nothing, 1000, 50)
13: End Sub ’遅延1秒・間隔50ms
14: …
15: Private Sub tmrScroll_Tick(ByVal status As Object)
16: ’---- タイマー
17: If (picScroll.Top + picScroll.Height) > 0 Then
18: …
19: Else
20: …
21: ’tmrScroll.Stop() ’スクロール後、タイマーを止める
22: _timer.Dispose()
23: End If
24: End Sub
25: …
26: End Class
|
|
| タイマーの置き換え |
1行目 :System.Threading クラスをインポート(Timerクラス、TimerCallback デリゲート利用)
5行目 :Timer のオブジェクトを定義
11行目 :既存のtmrScroll_Tick メソッドに Timer を生成時点で実行するようにデリゲート
(TimerCallback デリゲートを利用しますが、定義は既にされています。)
12行目 :Timer を生成(デリゲートに実行指示、タイマー開始)
15-24行目 :既存のタイマーのティック(Tick)イベント(引数はTimerCallback デリゲートに従う。)
(メソッド名は自由に付けてかまわない。)
22行目 :Timer を削除(タイマー停止)
(削除後にはこのイベントに入らなくなるので固定文字列は先に表示しておくこと。)
- Timer の詳細
Timer のコンストラクタでは次の引数が設定できます。
- TimerCallback デリゲートのオブジェクト名 (TimerCallback)
- 呼び出すメソッドに関連する固有の情報 (Object)
- メソッドを呼び出す前に遅延する時間(ms) (Integer,Long,TimeSpan)
- メソッドの呼び出しの時間間隔(ms) (Integer,Long,TimeSpan)
TimerCallback デリゲートの定義は自分では記述しませんが、次の様な形で定義されています。
ここでの引数はTimerの第2引数と同じです。何らかの情報を第2引数を通してメソッドに引き渡します。
| |
1: Public Delegate Sub TimerCallback(ByVal status As Object)
|
|
| 既に定義された TimerCallback のデリゲート定義 |
|
|
 |
|