📌 概要
Tera計算2_1メニュー画面.vbは、Tera計算2配送センター規模計算システムのメインメニュー画面を実装するVB.NETフォームクラスです。 本画面は、アプリケーションの起動時に表示され、ユーザーが主要な2つの機能(データ加工と規模計算)にアクセスするためのエントリポイントとして機能します。
🎯 主要機能
- データディレクトリの検証: 起動時に必要なデータフォルダーの存在を確認
- データ加工画面の起動: 規模計算に必要な基礎データを作成する画面を開く
- 規模計算画面の起動: 配送センター規模計算のメイン処理画面を開く
- ライセンス情報の表示: 著作権と有効期限の表示
- 親メニューへの復帰: Tera計算システム全体のメインメニューへ戻る
✅ ファイル情報
| 項目 | 内容 |
|---|---|
| ファイル名 | Tera計算2_1メニュー画面.vb |
| デザイナーファイル | Tera計算2_1メニュー画面.Designer.vb (245行) |
| クラス名 | Tera計算2メニュー画面F |
| 継承元 | System.Windows.Forms.Form |
| コード行数 | 32行 (本体) |
🏗️ クラス構造
クラス定義
Public Class Tera計算2メニュー画面F
Inherits System.Windows.Forms.Form
' イベントハンドラー:
' - Tera計算2開始画面F_Load
' - Tera計算2_データ加工Bt_Click
' - Tera計算2_規模計算Tb_Click
' - メニュー画面へBt_Click
End Class
継承階層
🎨 UI設計
フォームプロパティ
| プロパティ | 値 | 説明 |
|---|---|---|
| ClientSize | 1484 × 861 | クライアント領域のサイズ |
| StartPosition | CenterScreen | 画面中央に表示 |
| AutoScroll | True | 必要時に自動スクロール |
| Text | "Tera計算2メニュー画面" | ウィンドウタイトル |
コントロール階層
- Label317 - タイトルラベル
- Tera計算2_データ加工Bt - データ加工ボタン
- Label366, Label1 - 説明ラベル
- Tera計算2_規模計算Tb - 規模計算ボタン
- Label2 - 説明ラベル
- Tera計算2_説明Bt - 説明ボタン
- メニュー画面へBt - 戻るボタン
- TabControl1 - 内側のタブコントロール
主要コントロール詳細
📊 TabControl12
TabControl
位置: (3, 6)
サイズ: 1477 × 823
役割: メイン画面のタブコンテナ。「スタート画面Tb」タブを含む。
📄 スタート画面Tb
TabPage
背景色: RGB(192, 255, 192) - 薄緑
サイズ: 1469 × 797
役割: メインメニューのコンテンツを格納するタブページ。
🔤 Label317
Label
フォント: Microsoft Sans Serif, 14.25pt, Bold
テキスト: "Tera計算2_配送センター規模計算 開始画面"
位置: (110, 78)
役割: 画面タイトルの表示。
🔘 Tera計算2_データ加工Bt
Button
背景色: RGB(255, 255, 192) - 薄黄色
フォント: MS UI Gothic, 11.25pt, Bold
テキスト: "Tera計算2_規模計算用データ加工"
位置: (128, 153)
サイズ: 322 × 23
役割: データ作成画面を起動。
🔘 Tera計算2_規模計算Tb
Button
背景色: RGB(255, 255, 192) - 薄黄色
フォント: MS UI Gothic, 11.25pt, Bold
テキスト: "Tera計算2_規模計算"
位置: (128, 247)
サイズ: 322 × 23
役割: 規模計算画面を起動。
🔘 Tera計算2_説明Bt
Button
背景色: RGB(255, 255, 192) - 薄黄色
テキスト: "Tera計算2_規模計算 説明"
位置: (124, 341)
サイズ: 322 × 23
役割: 説明画面を表示(イベントハンドラー未確認)。
🔘 メニュー画面へBt
Button
背景色: RGB(255, 255, 192) - 薄黄色
テキスト: "tera計算 メニュー画面へ"
位置: (128, 435)
サイズ: 322 × 23
役割: フォームを閉じて親メニューに戻る。
📊 TabControl1
TabControl
位置: (579, 18)
サイズ: 873 × 773
タブ: "目隠しTp" (空), "概要Tp" (概要1Rtb含む)
役割: 右側に概要や説明を表示するタブ領域。
📝 概要1Rtb
RichTextBox
フォント: MS UI Gothic, 11.25pt, Bold
位置: (22, 16) (概要Tp内)
サイズ: 816 × 356
テキスト: リソースから読み込み
役割: システムの概要説明を表示。
🔤 著作権L
Label
フォント: MS UI Gothic, 9.75pt, Bold
初期テキスト: "物流技術研究所"
位置: (797, 839) - 画面右下
役割: 著作権と有効期限を表示(Load時に動的設定)。
説明ラベル
| ラベル名 | テキスト | フォント | 配置 |
|---|---|---|---|
| Label366 | "規模計算に必要なデータを作成" | MS UI Gothic, 11.25pt | (200, 189) |
| Label1 | "Tera計算0でデータを再作成時は必要" | Regular (赤色) | (203, 212) |
| Label2 | "出荷データから配送センター規模計算をする" | MS UI Gothic, 11.25pt | (187, 282) |
⚡ イベントハンドラー
1. Tera計算2開始画面F_Load
Form.Load 初期化
📄 ソースコード
Private Sub Tera計算2開始画面F_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ファイル確認()
' MyData_設定1読込() ' MyData.xlsx有り
著作権L.Text = 会社及び有効期限
End Sub
🔍 処理内容
- ファイル確認() を呼び出し、データディレクトリの存在を検証
会社及び有効期限グローバル変数の値を著作権Lラベルに設定
注: コメントアウトされた MyData_設定1読込() は、カスタム設定ファイル読み込み機能(現在未使用)。
⚠️ 起動時の重要な依存処理
ファイル確認() はTera計算k1.vbモジュールで定義されており、A:~F:ドライブから
Tera計算Data フォルダーを検索します。見つからない場合やフォルダーが複数存在する場合はエラーメッセージを表示し、
アプリケーションを終了します(End ステートメント)。
2. Tera計算2_データ加工Bt_Click
Button.Click 画面遷移
📄 ソースコード
Private Sub Tera計算2_データ加工Bt_Click(sender As Object, e As EventArgs) _
Handles Tera計算2_データ加工Bt.Click
' Public Class Tera計算2開始画面Fから Tera計算2データ作成F をモーダルで表示する
Dim Tera計算2データ作成F As New Tera計算2用データ作成F
Tera計算2データ作成F.ShowDialog(Me)
Tera計算2データ作成F.Dispose()
End Sub
🔍 処理内容
Tera計算2用データ作成Fフォームの新しいインスタンスを作成ShowDialog(Me)で現在のフォームを親としてモーダル表示- 子フォームが閉じられた後、
Dispose()でリソースを解放
目的: 規模計算に必要な集計データ(T610_全出荷集計など)を作成する画面を開く。
✅ モーダルダイアログの動作
- 子フォームが開いている間、親フォーム(本メニュー画面)は操作不可
- 子フォームを閉じると親フォームに制御が戻る
- ユーザーは子フォームでの操作を完了してから次の操作に進む
3. Tera計算2_規模計算Tb_Click
Button.Click 画面遷移
📄 ソースコード
Private Sub Tera計算2_規模計算Tb_Click(sender As Object, e As EventArgs) _
Handles Tera計算2_規模計算Tb.Click
' Public Class Tera計算2開始画面Fから 配送センター規模計算_改4From をモーダルで表示する
' 配送センター規模計算データ(T610_全出荷集計)が有れば開始
Dim 配送センター規模計算_改4From As New 配送センター規模計算_改5From
配送センター規模計算_改4From.ShowDialog(Me)
配送センター規模計算_改4From.Dispose()
End Sub
🔍 処理内容
配送センター規模計算_改5Fromフォームの新しいインスタンスを作成ShowDialog(Me)でモーダル表示- フォーム終了後、
Dispose()でリソースを解放
注: 変数名は 配送センター規模計算_改4From だが、実際のクラスは 配送センター規模計算_改5From(命名の不整合)。
⚠️ 前提条件
コメントによれば、配送センター規模計算データ(T610_全出荷集計)が存在することが前提です。 このデータは「Tera計算2_データ加工」で作成されますが、コード内で明示的な存在確認は行われていません。 規模計算画面内で必要データの有無がチェックされると推測されます。
4. メニュー画面へBt_Click
Button.Click 画面終了
📄 ソースコード
Private Sub メニュー画面へBt_Click(sender As Object, e As EventArgs) _
Handles メニュー画面へBt.Click
Me.Close()
End Sub
🔍 処理内容
Me.Close() を呼び出し、現在のフォームを閉じます。
このフォームが親フォームからモーダルまたはモードレスで呼び出されている場合、制御は親フォームに戻ります。
Tera計算2_説明Bt について
⚠️ イベントハンドラー未確認
デザイナーには Tera計算2_説明Bt ボタンが定義されていますが、
本ファイルの32行のコード内には対応するClickイベントハンドラーが見つかりませんでした。
以下の可能性が考えられます:
- 他のコードファイル(Partial Class)に実装されている
- 将来の実装のために配置されているが未実装
- 外部ドキュメント(PDFやヘルプファイル)を開く処理が別途定義されている
🚀 起動処理フロー
アプリケーション起動からメニュー画面表示まで
ファイル確認() の詳細動作
📄 ソースコード (Tera計算k1.vb より)
Public Sub ファイル確認() Dim chk As Integer = 0 ' フォルダーの存在確認 System.IO.Directory.Exists() If System.IO.Directory.Exists("A:\Tera計算Data") Then Dat保存Path = "A:\Tera計算Data" : chk += 1 If System.IO.Directory.Exists("B:\Tera計算Data") Then Dat保存Path = "B:\Tera計算Data" : chk += 1 If System.IO.Directory.Exists("C:\Tera計算Data") Then Dat保存Path = "C:\Tera計算Data" : chk += 1 If System.IO.Directory.Exists("D:\Tera計算Data") Then Dat保存Path = "D:\Tera計算Data" : chk += 1 If System.IO.Directory.Exists("E:\Tera計算Data") Then Dat保存Path = "E:\Tera計算Data" : chk += 1 If System.IO.Directory.Exists("F:\Tera計算Data") Then Dat保存Path = "F:\Tera計算Data" : chk += 1 If chk = 0 Then MsgBox("dataディレクトリが存在しません,[Tera計算Data]を任意のドライブに複写") End ElseIf chk >= 2 Then MsgBox("dataディレクトリが複数存在します") End End If ' ファイルパス設定 SoftDataPath = Dat保存Path & "\SoftData" MyDB = Dat保存Path & "\Tera計算.accdb" MyTable = "T000_出荷データ" MyExcel = Dat保存Path & "\出荷データ.xlsx" MySheet = "Sheet1" End Sub
🔍 設定されるグローバル変数
| 変数名 | 値の例 | 用途 |
|---|---|---|
| Dat保存Path | "D:\Tera計算Data" | データフォルダーのルートパス |
| SoftDataPath | "D:\Tera計算Data\SoftData" | ソフトウェアデータディレクトリ |
| MyDB | "D:\Tera計算Data\Tera計算.accdb" | Accessデータベースファイルパス |
| MyTable | "T000_出荷データ" | メインテーブル名 |
| MyExcel | "D:\Tera計算Data\出荷データ.xlsx" | 出荷データExcelファイルパス |
| MySheet | "Sheet1" | Excelシート名 |
🔗 依存関係
モジュール依存
ファイル確認()- データディレクトリ検証Dat保存Path- データフォルダーパスSoftDataPath- ソフトデータパスMyDB- データベースファイルパスMyTable- テーブル名MyExcel- ExcelファイルパスMySheet- シート名会社及び有効期限- ライセンス情報
- 規模計算用の集計データを作成
- T610_全出荷集計テーブルなどを生成
- 配送センター規模計算のメイン処理
- パラメーター設定、シミュレーション、結果出力
外部リソース依存
| リソースタイプ | パス/名称 | 用途 | 必須 |
|---|---|---|---|
| ディレクトリ | [A-F]:\Tera計算Data | データフォルダー(排他的に1つのみ) | ✅ 必須 |
| Accessデータベース | Tera計算.accdb | 出荷データ・集計データの格納 | ✅ 必須 |
| Excelファイル | 出荷データ.xlsx | 初期出荷データのインポート元 | ❓ データにより |
| 組み込みリソース | 概要1Rtb.Text | 概要説明テキスト | ✅ 必須 |
System 名前空間依存
System.Windows.Forms- Form, TabControl, Button, Label, RichTextBox等System.Drawing- Color, Font, Point, Size等System.ComponentModel- IContainer, ComponentResourceManager等System.IO(間接的) - ファイル確認()内でDirectory.Exists使用
🔄 画面遷移フロー
ユーザー操作による画面遷移
(本画面)
(モーダル表示)
(モーダル表示)
フォーム閉鎖
(tera計算メインメニュー)
モーダルダイアログの動作特性
📌 ShowDialog() の特徴
- ブロッキング動作: 子フォームが閉じられるまで親フォームの次の行が実行されない
- フォーカス制限: 子フォームが開いている間、親フォームは操作不可
- 同期処理: 子フォームの処理完了後に親フォームの処理が再開
- リソース管理: ShowDialog()の後に明示的にDispose()を呼び出してメモリを解放
推奨操作フロー
✅ 標準的な使用手順
- アプリケーション起動
- メニュー画面が自動的に表示される
- データディレクトリが自動で検証される
- 初回またはデータ更新時
- 「Tera計算2_規模計算用データ加工」ボタンをクリック
- 出荷データから集計データを作成
- 規模計算実行
- 「Tera計算2_規模計算」ボタンをクリック
- パラメーター設定とシミュレーションを実行
- 終了
- 「tera計算 メニュー画面へ」ボタンで親メニューに戻る
📝 技術ノート
コーディングスタイル
命名規則の特徴
- 日本語識別子: クラス名、変数名、メソッド名に日本語を使用
- サフィックス規則:
F- Form(例: Tera計算2メニュー画面F)Bt- Button(例: Tera計算2_データ加工Bt)Tb- TabPage または Button(用途による)L- Label(例: 著作権L)Rtb- RichTextBox(例: 概要1Rtb)Tp- TabPage(例: 概要Tp)
- コメントスタイル: シングルクォート(
')を使用した行コメント
設計上の注意点
⚠️ 潜在的な問題点
- ハードコーディングされたドライブレター
- A:~F:ドライブのみ検索(G:以降やネットワークドライブは非対応)
- 改善案: アプリケーション設定ファイルまたはレジストリでパスを管理
- End ステートメントの使用
ファイル確認()内でEndを使用(推奨されない終了方法)- リソースの適切な解放が行われない可能性
- 改善案:
Application.Exit()または例外スローを使用
- 変数名とクラス名の不整合
- 変数名:
配送センター規模計算_改4From - クラス名:
配送センター規模計算_改5From - バージョン管理の混乱を招く可能性
- 変数名:
- データ存在確認の欠如
- 規模計算実行時に必要なT610_全出荷集計テーブルの存在確認がない
- ユーザーエクスペリエンスの低下(エラーが後から発生)
- 未実装機能
Tera計算2_説明Btのイベントハンドラーが未確認MyData_設定1読込()がコメントアウト(カスタム設定機能未使用)
セキュリティ考慮事項
🔒 セキュリティ上の注意
- パスインジェクション: ファイルパスは固定文字列で安全だが、将来的に動的パスを扱う場合は検証が必要
- データベースアクセス: MyDBパスが直接使用される(SQL接続文字列の検証が必要)
- ライセンス情報:
会社及び有効期限変数がグローバルで平文管理されている
パフォーマンス特性
⚡ パフォーマンス分析
- 起動時間: ファイル確認()が最大6回のディレクトリ検索を実行(A:~F:)
- 通常は数ミリ秒だが、ネットワーク環境やアクセス不可ドライブでタイムアウトの可能性
- メモリ使用: モーダルダイアログは適切にDispose()されており問題なし
- UI応答性: ShowDialog()によりブロッキング動作するため、子フォームの処理中は親画面が応答しない(設計通り)
メンテナンス性
✅ 良好な設計要素
- 明確な責任分離: メニュー画面は起動とナビゲーションのみを担当
- コメントの適切性: コード内に意図が明記されている
- モジュール化: 共通処理はTera計算k1.vbに集約
デバッグ情報
🐛 デバッグ時の確認ポイント
- ファイル確認()の動作確認
' Dat保存Pathの値を確認 Debug.WriteLine("Dat保存Path: " & Dat保存Path) - グローバル変数の状態確認
' Load時に以下を確認 Debug.WriteLine("MyDB: " & MyDB) Debug.WriteLine("MyExcel: " & MyExcel) Debug.WriteLine("会社及び有効期限: " & 会社及び有効期限) - モーダルダイアログの戻り値
' ShowDialogの戻り値を確認(DialogResult) Dim result As DialogResult = Tera計算2データ作成F.ShowDialog(Me) Debug.WriteLine("Dialog Result: " & result.ToString())
拡張性
🔧 将来の拡張候補
- 設定ファイル管理: コメントアウトされた
MyData_設定1読込()の実装 - ヘルプ機能:
Tera計算2_説明Btの実装(PDF表示やヘルプダイアログ) - データ検証: 規模計算ボタンクリック時にT610テーブルの存在確認
- ログ機能: 操作履歴やエラーログの記録
- 多言語対応: リソースファイルを使用した国際化対応
- テーマ切り替え: UIカラースキームのカスタマイズ
関連ファイル
| ファイル名 | 種類 | 関連性 |
|---|---|---|
| Tera計算k1.vb | モジュール | グローバル変数・共通関数を提供(ファイル確認()等) |
| Tera計算2_2データ作成.vb | フォーム | Tera計算2用データ作成F の実装ファイル |
| Tera計算2_3配送センタ規模計算.vb | フォーム | 配送センター規模計算_改5From の実装ファイル |
| Tera計算.accdb | データベース | 出荷データ・集計データを格納するAccessデータベース |
| 出荷データ.xlsx | Excel | 初期出荷データのインポート元ファイル |
📊 まとめ
クラスの役割
Tera計算2メニュー画面Fは、Tera計算2システムのエントリポイントとして機能し、 データ加工画面と規模計算画面へのナビゲーション機能を提供します。 起動時にデータディレクトリの検証を実行し、システムの前提条件を確保します。
設計思想
- シンプルな画面構成: 初心者にも分かりやすいメニュー形式
- 段階的ワークフロー: データ加工→規模計算の順序を視覚的に提示
- モーダルダイアログ: 各機能を独立した画面として実行
- 集約された初期化: 共通処理はグローバルモジュールで一元管理
使用上の注意
- データディレクトリ(Tera計算Data)はA:~F:ドライブのいずれか1つのみに配置
- 規模計算を実行する前にデータ加工処理を完了させる必要がある
- モーダルダイアログ使用時は、子画面の処理完了まで待つ設計