このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【6日でできるVisual Basic2022入門】④コードの実装と実行:ラーメンタイマーアプリの完成

④コードの実装と実行:ラーメンタイマーアプリの完成
本章では、ラーメンタイマー完成のための実装と実行確認を行います。ButtonStart.ClickでInteger.TryParseによる検証、EndSeconds/Elapsed初期化、Timer1.Start()、進行中の入力欄・ボタン無効化を実施。Timer1.Tickで1秒ごとに残り秒を更新し、0到達でTimer1.Stop()、UIを復帰、SystemSounds.Asterisk.Play()とMessageBox.Showで通知。二重起動防止や境界値にも配慮します。

4.コードの実装と実行:ラーメンタイマーアプリの完成
4.1. 完成コード(FormRamenTimer.vb)
下記はラーメンタイマーアプリの完成版です。前章のコントロール名・プロパティを前提にしています。
Imports System.Media
Public Class FormRamenTimer
' 入力された合計秒
Private EndSeconds As Integer
' 経過秒
Private Elapsed As Integer
Private Sub FormRamenTimer_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
' 初期表示(例)
TextRemaining.Text = ""
' Enter で開始(前章で設定済みの場合は不要)
Me.AcceptButton = ButtonStart
End Sub
' Start ボタンクリック
Private Sub ButtonStart_Click(sender As Object, e As EventArgs) _
Handles ButtonStart.Click
' 1) 入力検証
Dim input As Integer
If Not Integer.TryParse(TextSetSeconds.Text, input) OrElse input <= 0 Then
MessageBox.Show("ゆで時間は 1 以上の整数で入力してください。", "入力エラー")
TextSetSeconds.Focus()
TextSetSeconds.SelectAll()
Exit Sub
End If
' 実用上の上限(任意):最大 3600 秒に制限
If input > 3600 Then
MessageBox.Show("最大 3600 秒までにしてください。", "入力エラー")
TextSetSeconds.Focus()
TextSetSeconds.SelectAll()
Exit Sub
End If
' 2) 変数初期化
EndSeconds = input
Elapsed = 0
TextRemaining.Text = EndSeconds.ToString()
' 3) UI の状態変更
TextSetSeconds.Enabled = False
ButtonStart.Enabled = False
' 4) タイマースタート(1秒間隔)
Timer1.Interval = 1000
Timer1.Start()
End Sub
' 1秒毎の処理
Private Sub Timer1_Tick(sender As Object, e As EventArgs) _
Handles Timer1.Tick
Elapsed += 1
Dim remaining = EndSeconds - Elapsed
If remaining < 0 Then remaining = 0
' 画面更新
TextRemaining.Text = remaining.ToString()
' 終了判定
If remaining = 0 Then
Timer1.Stop()
' UI の状態を元に戻す
TextSetSeconds.Enabled = True
ButtonStart.Enabled = True
TextSetSeconds.Focus()
TextSetSeconds.SelectAll()
' 通知(音+メッセージ)
SystemSounds.Asterisk.Play()
MessageBox.Show("麺がゆで上がりました!お好みの固さでお召し上がりください。", "ラーメンタイマー")
End If
End Sub
End Class4.2. 主要コードの要点解説
| 位置 | コード要素 | 役割・ポイント |
|---|---|---|
| クラス先頭 | EndSeconds, Elapsed | 合計秒・経過秒をフォーム全体で共有するためのフィールド |
| Load | Handles MyBase.Load | フォーム表示直前に初期化。AcceptButton の設定など |
| Start クリック | Integer.TryParse | 例外を出さずに数値検証。Exit Sub で早期リターン |
| Start クリック | Enabled=False | 実行中の二重開始を防止。入力欄もロック |
| Tick | Timer1.Interval=1000 | 1 秒毎に Tick イベント発生 |
| Tick | remaining = EndSeconds - Elapsed | 残り秒の計算と表示更新 |
| Tick | Stop() → 通知 | 0 秒到達で停止。SystemSounds.Asterisk.Play() と MessageBox.Show |
4.3. Visual Basic 2022 の関連 API/言語機能の解説
| 要素 | 概要 | 使いどころ |
|---|---|---|
Handles 句 | メソッドとイベントの関連付け | ButtonStart.Click、Timer1.Tick など |
Integer.TryParse(String, ByRef Integer) | 変換の成否を真偽値で返す | 入力検証(例外を避けたい時) |
Exit Sub | 現在のサブルーチンを即終了 | バリデーション NG 時の早期退出 |
Timer.Interval/Start/Stop | 周期イベントの制御 | 1 秒カウントダウン |
MessageBox.Show(text, caption) | モーダル通知ダイアログ | 完了メッセージの表示 |
System.Media.SystemSounds | OS 標準の効果音 | 完了を聴覚的に通知 |
4.4. 実行手順と期待結果
- 「▶RamenTimer」ボタンで起動
- 「ゆで時間(秒)」に 180 と入力
- Enter または Start をクリック
- 「残り時間(秒)」が 180, 179, 178 … と 1 秒ごとに更新
- 0 で音が鳴り、ダイアログに「麺がゆで上がりました!お好みの固さでお召し上がりください。」と表示
- OK を押すとボタンと入力欄が再び操作可能
実行結果

残り時間(秒) 180 → 179 → ... → 0
🔔 ピロン → [麺がゆで上がりました!...]
4.5. 動作確認チェックリスト
| 観点 | 期待 | 確認方法 |
|---|---|---|
| 入力検証 | 文字や 0、負数でエラー表示 | 「abc」「0」「-5」で Start |
| 二重起動防止 | 実行中は Start 連打できない。 | 進行中にボタンが無効化 |
| 画面更新 | 1 秒ごとに残り秒が減る。 | 目視でカウントダウン |
| 完了時処理 | 音+メッセージ、UI 復帰 | 0 秒到達時の挙動 |
| フォーカス戻し | 入力欄へ選択状態 | 完了後に再編集しやすい。 |
4.6. よくあるつまずきと対処
| 症状 | 原因 | 対処 |
|---|---|---|
| Tick が発生しない | Timer1 がフォームに無い/Start() していない | コンポーネントトレイに Timer1 を追加、Start() 呼び出し確認 |
| 「Form1 が見つからない」 | フォーム名変更後の起動先不一致 | プロジェクトの「スタートアップ オブジェクト」を FormRamenTimer に |
| 残り時間がマイナス表示 | 終了判定が遅い | If remaining < 0 Then remaining = 0 を入れる |
| 実行中に再入力できてしまう | 入力欄を無効化していない | Start 後に TextSetSeconds.Enabled=False |
4.7. 追加課題(拡張のヒント)
- 停止・再開ボタンの追加(
Timer1.Enabledの切り替え) - 残り時間の mm:ss 表示(
TimeSpan.FromSeconds(remaining).ToString("mm\:ss")) - 完了時に任意のサウンドファイル再生(
My.Computer.Audio.Play)
まとめ
本章では、Start クリックと Tick の 2 本のイベントハンドラーを中心に、入力検証→初期化→カウントダウン→通知までの一連の流れを実装しました。これでラーメンタイマーは完成です。次は拡張課題として停止/再開や mm:ss 表示などを加えると実用性がさらに高まります。
