====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*=
[ Visual Basic.NETに挑戦する No.005 ]  2003/03/05  毎週水曜日
=*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====
勢いで買ってしまったVisual Basic .NETを使って、プログラムを組んでみます。
主にExcelやAccessのVBAしかやったことのない三流プログラマーのKen3が、
がんばって解説します。初心者歓迎です(プロの人は内容が簡単で物足りないかも)
有料版なので遠慮しないでドンドン質問下さいね。
楽しみながら〜一緒にVB.NETを覚えましょう
----------------------------------------------------------------------------

<タイマーイベントを使ってみた>

どうも、三流プログラマーのKen3です。

飛ばして行く予定が、なかなか進まなくスミマセン。
今回は、タイマーイベントを使う方法を書きたいと思います。

/*
 * 1.タイマーイベントを使う方法
*/

前回、乱数で3つの数字を表示するナンバーズ3もどきをやりました。

ボタンを押したら、乱数の数値を表示してました。
しつこく書くと、ボタンのクリックイベントで、
数値をセットしました。

ビジネスアプリケーションではあまり使わないのですが、
スタートボタンを押したらスロットマシーンのように
数値を切り替え、ストップボタンで止めるような処理を作ってみたいと思います。

やり方は簡単で、タイマーでイベントを発生させたいので、
タイマーコンポーネントをフォームに貼り付けます。


すると、フォームの下にタイマーコンポーネントが貼られます。

1ミリ秒単位にイベント発生を設定できるみたいなので(ホントかよ?)
Interval = 1000
1000と設定し、1秒に設定します。


Private Sub btnSTART_Click(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles btnSTART.Click
    Randomize() '乱数発生の初期化
    Me.Lab01.Text = Int(10 * Rnd())  '乱数を発生させセットする
    Me.Lab02.Text = Int(10 * Rnd())
    Me.Lab03.Text = Int(10 * Rnd())
End Sub

となっている開始ボタンの処理を

Private Sub btnSTART_Click(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles btnSTART.Click
    Randomize() '乱数発生の初期化
    Timer1.Enabled = True  'タイマーを実行する
End Sub

Timer1.Enabled = True  'タイマーを実行する
タイマーコンポーネントの..EnabledプロパティをTrueにして、
実行するように設定します。

次に、タイマーコンポーネントにコードを記述します。
タイマーコンポーネントをダブルクリックすると、
Private Sub Timer1_Tick(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles Timer1.Tick
とTimer1__Tickにコードを書くことができます。

Private Sub Timer1_Tick(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles Timer1.Tick
    Me.Lab01.Text = Int(10 * Rnd())  '乱数を発生させセットする
    Me.Lab02.Text = Int(10 * Rnd())
    Me.Lab03.Text = Int(10 * Rnd())
End Sub
普通にラベルへのデータセットのコードを書きます

F5を押して、実行すると少し遅いけど1秒単位で数字が切り替わると思います。

まぁ、次はもう想像できましたよね?
止めるボタンbtnSTOPを作成します。


ボタンのクリックイベントに
Private Sub btnSTOP_Click(ByVal sender As System.Object, _
                    ByVal e As System.EventArgs) Handles btnSTOP.Click
    Timer1.Enabled = False  'タイマーを止める
End Sub
と
開始の逆、Timer1.Enabled = Falseとタイマーの使用を止めてみます。

/*
 * 2.本当はコントロール配列の予定だったけど、、、
*/
ラベルコントロールを配列にしてループで回したかったけど、

Visual Basic の概念   

Visual Basic .NET におけるコントロール配列の変更点参照
Visual Basic .NET におけるイベントの変更点 | Visual Basic .NET における
コントロールの変更点 | Windows フォームのタブ オーダーの設定 
Visual Basic 6.0 では、複数のイベントを共有するコントロールのグループを
指定する場合は、コントロール配列が使用されていました。これらのコントロー
ルは、同じ型と名前を持つ必要がありました。

Visual Basic .NET では、コントロール配列はサポートされません。イベント 
モデルに加えられた変更により、コントロール配列が不要になりました。Visual
 Basic 6.0 では、イベントがコントロール配列によって共有されていましたが、
Visual Basic .NET では、複数のコントロールからのイベントがイベント ハンド
ラによって処理されます。このことにより、同じイベントを共有する異なる型のコ
ントロール グループを作成できるようになります。

たとえば、あるフォームに 2 つの Button コントロール (Button1 および Button2
) および 1 つの CheckBox コントロール (CheckBox1) を追加し、3 つのコントロー
ルすべての Click イベントを処理するイベント ハンドラを作成できます。

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal e As Sy
stem.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click
Visual Basic 6.0 コントロール配列のもう 1 つの機能に、Index プロパティによっ
てコントロールを参照する機能がありました。Visual Basic .NET コントロールには、
Index プロパティはありませんが、TabIndex プロパティまたは Tag プロパティなど、
別の共通プロパティを使用してこの機能を複製できます。

たとえば、Windows フォームに新しく備わった、
ビジュアル タブ オーダー機能を使用して、
コントロール グループの TabIndex プロパティを設定し、
Select Case ステートメントで TabIndex を使用できます。

Private Sub MixedControls_Click(ByVal sender As System.Object, ByVal 
e As System.EventArgs) Handles Button1.Click, Button2.Click, CheckBox1.Click
   Select Case sender.TabIndex
      Case 0
         MsgBox("Button 1")
      Case 1
         MsgBox("Button 2")
      Case 2
         MsgBox("CheckBox 1")
   End Select
End Sub

あれ?って感じだったので、次までには探りたいと思います。
~~~~~~~~~~~~~~~~~~~~~~~

/*
 * 3.終わりの挨拶
*/

タイマーイベントを発生させただけでした。
深く考えないで、なんだぁ〜簡単ジャン程度に思っててください。

次回からコントロールまわりをガーっと飛ばして行かないと、
これがVB.NETだぁ、までの道のりは長そうです。

気長に待てる人は、購読続けて下さい。
*解説、長くかかりそうなので。

補足(連絡用マガジン発行)で、細かく説明を発行します。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

プログラム作りは簡単で面白いなぁと感じるような
解説/メールマガジンを書きたいと思ってます。

よろしくお願いします。

AB型の変わり者、三流プログラマーのKen3でした。