このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【6日でできるVisual Basic2022入門】④間違い漢字探しゲーム:画面の設計②

④間違い漢字探しゲーム:画面の設計②

 本章では、SplitContainer の上段に操作系(LabelFind/TextHunt/LabelRec/TextTimer/LabelSec/ButtonStart)、下段に 4×4=16 個の大きなボタンを等間隔で配置し、各プロパティを整えます。TextHunt は中央寄せ、TextTimer は ReadOnly+右寄せ、盤面ボタンは Meiryo 48pt。Timer1(Interval≈20ms)を追加し、Load で初期化、AcceptButton=ButtonStart を設定。整列はスナップラインと「間隔を均等」で素早く調整します。

4.間違い漢字探しゲーム:画面の設計②-コントロールの配置とプロパティ値の設定

4.1. レイアウト方針とワイヤーフレーム

 Panel1 に操作系(探す漢字・記録・Start)、Panel2 に 4×4 のボタン盤を等間隔で配置します。視線は左→右→下へ流れるように配置し、サイズや余白はスナップラインで統一します。

4.2. Panel1(上段:操作エリア)の配置

表:Panel1 に置くコントロールと主プロパティ

No種別(Name)主プロパティ設定値例・目的
1LabelLabelFindTextを探せ(見出し)
2TextBoxTextHuntTextAlignCenter
3LabelLabelRecText記録:
4TextBoxTextTimerTextAlign / ReadOnly Right / True(秒表示)
5LabelLabelSecText
6ButtonButtonStartTextスタート

並べ方のコツ

  • 左端から「LabelFind→TextHunt→LabelRec→TextTimer→LabelSec→ButtonStart」の順に横並び
  • スナップラインで下端を揃え、横の均等配置を使うと素早く整います。
  • 操作性向上のため、フォームの AcceptButton = ButtonStart を後述コードで設定します。

VB 2022 用語ミニ解説

要素概要使いどころ
TextBox.TextAlignLeft/Center/Right を選択TextHunt は Center、TextTimer は Right
ReadOnly=True入力不可で表示専用TextTimer を編集不可に
AcceptButtonEnter で押される既定ボタンButtonStart に割当

4.3. Panel2(下段:4×4 盤面)の配置

まず 1 個のボタンを大きめに作り、他へ複製すると効率的です。

盤面ボタンの推奨プロパティ(共通)

プロパティ値の例目的
FontMeiryo UI 48pt漢字が見やすいサイズ
Size140×140クリックしやすい
Text(空)ゲーム開始時にセット
(Name)Button1Button16コードで参照しやすい
TabStopFalse盤面ではタブ移動不要

整列手順(おすすめ)

  1. Button1 を作る → 同じ行に 3 個複製(計 4 個)。
  2. 行の左右端を揃え、「左右の間隔を均等にする」。
  3. 1 行を丸ごと 3 回縦に複製(計 4 行)。
  4. 列ごとに「上下の間隔を均等にする」→ 最後に「下揃え」で段の高さを統一。

補足:自動生成派の方へ(任意)
後章の実装時に、コードで 4×4 を自動生成しても構いません。その場合は AddHandler で共通 Click を割り当てます(サンプルは 4.6 参照)。

4.4. Timer コントロールの追加

 コンポーネントトレイに Timer1 を追加し、Interval=50(20〜50ms の範囲がおすすめ)。計時の粒度を決めます。
※ 実装は次章で Start/StopTick を記述。

4.5. デザインを仕上げる最小コード(表示の初期化)

デザイナ設定に加えて起動時の見栄えを整えます。後章でゲームロジックを追加します。

Public Class FormKanjiHunt
    Private Sub FormKanjiHunt_Load(sender As Object, e As EventArgs) _
        Handles MyBase.Load
        ' 操作性
        Me.AcceptButton = ButtonStart
        ' 表示の初期化
        TextTimer.Text = "0.00"
        TextTimer.ForeColor = SystemColors.ControlText
        TextHunt.Text = ""   ' Start でセット
        ' 盤面をいったん空に
        For Each b In SplitContainer1.Panel2.Controls.OfType(Of Button)()
            b.Text = ""
        Next
    End Sub
End Class

VB 2022 のポイント

要素説明
Controls.OfType(Of Button)()指定型だけを抽出できる LINQ 拡張
Handles MyBase.Loadフォーム表示直前の初期化に最適

4.6. (任意)盤面ボタンをコードで一括生成する例

デザイナで 16 個置く代わりに、以下のように Panel2 に自動配置も可能です。

Private Sub BuildGrid(rows As Integer, cols As Integer)
    Dim w = 120, h = 100, gap = 8
    Dim baseX = 12, baseY = 12
    For r = 0 To rows - 1
        For c = 0 To cols - 1
            Dim idx = r * cols + c + 1
            Dim b As New Button() With {
                .Name = $"Button{idx}",
                .Font = New Font("Meiryo", 36, FontStyle.Regular),
                .Size = New Size(w, h),
                .Location = New Point(baseX + c * (w + gap), baseY + r * (h + gap)),
                .TabStop = False
            }
            AddHandler b.Click, AddressOf Buttons_Click ' 共通ハンドラー(次章で実装)
            SplitContainer1.Panel2.Controls.Add(b)
        Next
    Next
End Sub

4.7. タブ順・アクセシビリティ

  • タブ順は Panel1 内で「TextHunt → ButtonStart → (TextTimer は ReadOnly なので TabStop=False でも可)」。
  • 盤面ボタンは TabStop=False 推奨(キーボードでの誤移動を防止)。
  • ラベルには意味のある Text を設定し、スクリーンリーダーで文脈が伝わるように。

4.8. よくあるつまずきと対処

症状原因対処
文字が小さく読みにくい既定フォントのまま盤面ボタンを Meiryo 36pt、TextHunt/TextTimer を 16pt 以上
行・列が微妙にズレる手動配置のみ「左右/上下の間隔を均等にする」「下揃え」を活用
Enter で始まらないAcceptButton 未設定フォームの AcceptButton = ButtonStart
記録欄が編集できてしまうReadOnly 未設定TextTimer.ReadOnly=True
盤面が窮屈Panel2 が狭い前章の SplitterDistance を見直す

4.9. 配置チェックリスト

  • Panel1 に「を探せ/探す文字/記録/秒/Start」が横並びで下端揃え
  • TextTimer は右寄せ・ReadOnly、初期表示 0.00
  • Panel2 に 4×4=16 個 のボタンが等間隔で配置、フォントは大きめ
  • Timer1.Interval を 50ms 目安に設定
  • 実行で UI が崩れず表示(リサイズしても概ね安定)

まとめ

 本章では、SplitContainer の上下二段に操作エリアと 4×4 盤面を具体的に配置し、プロパティを整えました。次章「5.間違い漢字探しゲーム:コードの実装と実行」では、乱数で正解位置と漢字ペアを選び、共通 Click ハンドラーTimer による計時・ペナルティを実装してゲームを完成させます。