====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*= [ 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でした。