このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【6日でできるVisual Basic2022入門】③今日の運勢アプリ:画面の設計

③今日の運勢アプリ:画面の設計
本章では、今日の運勢アプリのUIを具体化します。上段に日付(DateTimePicker:DatePick)、中段に「占う」ボタン(ButtonTell)、その下に結果画像(PictureBox:PictureBoxResult)、下段にメッセージ(TextBox:TextResult)を配置。
主要設定は PictureBox.SizeMode=StretchImage、TextResult は Multiline/ReadOnly/ScrollBars=Vertical、DatePick.Format=Short。AcceptButton=ButtonTell と適切なタブ順で操作性を最適化し、スナップラインで整列。最小サイズも決め、次章のリソースの追加に備えます。

3.今日の運勢アプリ:画面の設計-コントロールの配置とプロパティ値の設定
3.1. レイアウト方針とワイヤーフレーム
日付入力は上段、実行ボタンはと結果の画像は中央、詳細メッセージは下段にまとめ、視線移動を最短にします。画像はのちの章でリソースを追加して表示させていきます。

3.2. 使うコントロール一覧
| No | 種別 | (Name) | 主な役割 |
|---|---|---|---|
| 1 | Form | FormUranai | 画面本体 |
| 2 | Label | LabelDate | 「今日の日付」見出し |
| 3 | DateTimePicker | DatePick | 日付入力 |
| 4 | Button | ButtonTell | 占い実行 |
| 5 | PictureBox | PictureBoxResult | 結果画像の表示 |
| 6 | TextBox | TextResult | 結果メッセージの表示(複数行) |
3.3. デザイナでの配置手順
- フォームサイズをおよそ 480×360 に調整
- 上段左に LabelDate、その右に DatePick、右端に ButtonTell を横並び
- 1 行空けて中央に PictureBoxResult を大きめに配置
- 下段に TextResult をフォーム幅いっぱいに配置
- 位置と間隔はスナップラインで揃える(等間隔配置を活用)
ヒント
将来のリサイズ耐性を上げるなら TableLayoutPanel(行3×列3)に載せる方法も有効です。まずは手動配置で問題ありません。
3.4. プロパティ値の設定(詳細)
| 対象 | プロパティ | 設定値(例) | 目的 |
|---|---|---|---|
| FormUranai | Text | 今日の運勢 | タイトル |
| StartPosition | CenterScreen | 画面中央開始 | |
| FormBorderStyle | FixedSingle | レイアウト固定 | |
| MaximizeBox | False | 最大化無効 | |
| Font | Meiryo UI, 10–11pt | 日本語可読性 | |
| Size | 480, 360 | 表示領域を確保 | |
| LabelDate | Text | 今日の日付 | 見出し |
| AutoSize | True | 自動サイズ | |
| DatePick | Name | DatePick | コード参照名 |
| Format | Short | 短い日付表記 | |
| ShowUpDown | True | スピン操作を許可 | |
| ButtonTell | Name | ButtonTell | コード参照名 |
| Text | 占う | ボタン表示 | |
| Size: Width/Height | 100, 32 | 押しやすさ | |
| PictureBoxResult | Name | PictureBoxResult | コード参照名 |
| Size | 360, 160 | 視認性 | |
| BorderStyle | FixedSingle | 枠線で領域を明確化 | |
| SizeMode | StretchImage | 縦横比を保って拡縮 | |
| TextResult | Name | TextResult | コード参照名 |
| Multiline | True | 複数行 | |
| ReadOnly | True | 読み取り専用 | |
| ScrollBars | Vertical | 長文に対応 | |
| BackColor | Window | 読みやすい背景 | |
| Font | Meiryo, 10–11pt | 読みやすさ | |
| Size: Height | 60 | 表示領域を確保 |
操作性の改善
フォームの AcceptButton に ButtonTell を割り当てると Enter で実行できます(後述 3.6)。
3.5. タブオーダーとアクセシビリティ
メニュー「表示」→「タブ オーダー」で 1) DatePick → 2) ButtonTell の順になるよう設定します。TextResult は ReadOnly かつ結果表示用なので TabStop=False にしておくと快適です。
3.6. キーボード操作の割り当て(Enter で占う)
フォームを選択し、「AcceptButton = ButtonTell」 に設定します。これで Enter キーで占いが実行できます。将来キャンセル操作を付ける場合は「CancelButton」 に割り当てます。
VB 2022 の用語・命令ミニ解説
| 要素 | 種別 | 概要・使いどころ |
|---|---|---|
AcceptButton | フォームのプロパティ | 指定ボタンに Enter を割り当てる |
DateTimePicker.Format | 列挙体(DateTimePickerFormat) | Short/Long/Time/Custom から選択 |
PictureBox.SizeMode | 列挙体(PictureBoxSizeMode) | StretchImageでPictureBoxコントロールのサイズに引き伸ばす |
TextBox.ReadOnly | プロパティ | 入力不可にして表示専用に |
ScrollBars | 列挙体 | None/Horizontal/Vertical/Both |
3.7. 初期表示を整える最小コード(FormUranai.vb)
デザイナ設定に加え、読みやすい初期状態に整えるコード例です(この章では占いロジックは実装しません)。
Public Class FormUranai
Private Sub FormUranai_Load(sender As Object, e As EventArgs) _
Handles MyBase.Load
Me.MinimumSize = New Size(480, 360)
Me.AcceptButton = ButtonTell
DatePick.Value = Date.Today
TextResult.Text = "[占う]を押すと、今日の運勢が表示されます。"
TextResult.ForeColor = SystemColors.ControlText
' 画像は後章(リソース追加)で設定予定:
' Dim rm As New ComponentResourceManager(GetType(FormUranai))
' Dim Title As Image = CType(rm.GetObject("Title"), Image)
' PictureBoxResult.Image = Title
End Sub
End Classポイント
Handles MyBase.Loadはフォーム表示直前に 1 度だけ呼ばれ、初期化に最適です。Size構造体で最小サイズを与えるとレイアウト崩れを防げます。
3.8. よくあるつまずきと対処
| 症状 | 原因 | 対処 |
|---|---|---|
| 文字が詰まって読みにくい | フォントが既定で小さい | フォームと TextResult の Font を Meiryo 10–11pt に |
| 画像が小さく表示されるる | SizeMode 未設定 | SizeMode=StretchImage に変更 |
| Enter で実行できない | AcceptButton 未設定 | フォームの AcceptButton を ButtonTell に |
| 長文が見切れる | ScrollBars=None | TextResult.ScrollBars=Vertical に |
配置完了チェックリスト
- DatePick と ButtonTell が上段に横並び
- PictureBoxResult が中央で十分なサイズ
- TextResult が複数行・読み取り専用・縦スクロール
- Enter キーで占い実行(AcceptButton 設定済み)
- 初期表示のガイダンス文が TextResult に表示
この状態になれば、次章「④今日の運勢アプリ:リソースの追加」で結果画像(大吉/中吉/小吉/吉/凶/タイトル)をリソースとして追加し、続く章で 最終コード実装に進めます。
