Visual Basic
Visual Basic
Java2 SE 5.0 API
Java2 SE 1.4 API
Java2 EE API
Struts 1.0.2
MSDN2 Library
MySQL 5.1
MySQL 4.1
HTMLリファレンス
CSSリファレンス
JavaScript
基本カラーチャート
カレンダー
 最新PG・講座情報
 最新ニュース
 電子辞書・辞典
ご意見・ご要望はこちらまで

4.デリゲートの利用

  1. タイマーの置き換え

     通常のコントロールのタイマー(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 を削除(タイマー停止)
             (削除後にはこのイベントに入らなくなるので固定文字列は先に表示しておくこと。)


  2. Timer の詳細

     Timer のコンストラクタでは次の引数が設定できます。
    1. TimerCallback デリゲートのオブジェクト名 (TimerCallback)
    2. 呼び出すメソッドに関連する固有の情報 (Object)
    3. メソッドを呼び出す前に遅延する時間(ms) (Integer,Long,TimeSpan)
    4. メソッドの呼び出しの時間間隔(ms) (Integer,Long,TimeSpan)

     TimerCallback デリゲートの定義は自分では記述しませんが、次の様な形で定義されています。 ここでの引数はTimerの第2引数と同じです。何らかの情報を第2引数を通してメソッドに引き渡します。

     
     1:     Public Delegate Sub TimerCallback(ByVal status As Object)
    
     既に定義された TimerCallback のデリゲート定義


 INDEX
  課題 Visual Basic 映画のエンディングのテキストスクロールの作成
  1.プログラムの仕様
  2.プログラムの説明
  3.起動例
4.デリゲートの利用
Top
Copyright© 2003-2007 FumikiChan All Rights Reserved.
http://www.fumikichan.net/