# マスタ画面フォント統一実装手順書
## 概要
すべてのマスタ画面のフォントをHG丸ゴシックM-PROに統一します。画面要素ごとに適切なフォントサイズとスタイルを設定します。
## フォント設定仕様
### 設定内容
1. **画面のタイトル**(例:添付ファイル「定期送信」など)
- フォント:HG丸ゴシックM-PRO
- サイズ:22pt
- スタイル:Bold
2. **各項目**(例:テキストボックス、グリッドなど)
- フォント:HG丸ゴシックM-PRO
- サイズ:10pt
- スタイル:Regular
3. **各項目に付随するラベル**(例:添付ファイルの「パターン名称」など)
- フォント:HG丸ゴシックM-PRO
- サイズ:12pt
- スタイル:Bold
4. **ボタン**(例:戻るボタン、新規作成ボタンなど)
- フォント:HG丸ゴシックM-PRO
- サイズ:18pt
- スタイル:Regular
### 対象外
- メニュー画面のフォントは変更しない
## 対象画面とファイル
### マスタ検索画面
1. **顧客マスタ画面**
- M_CustomerMaster.cs
- M_CustomerMaster.Designer.cs
2. **送信パターンマスタ画面**
- M_SendPatternMaster.cs
- M_SendPatternMaster.Designer.cs
3. **送信者情報マスタ画面**
- M_SenderMaster.cs
- M_SenderMaster.Designer.cs
### マスタ個別編集画面
1. **顧客マスタ個別編集画面**
- M_CustomerMasterIndividualEdit.cs
- M_CustomerMasterIndividualEdit.Designer.cs
2. **送信パターンマスタ個別編集画面**
- M_SendPatternIndividualEdit.cs
- M_SendPatternIndividualEdit.Designer.cs
### 関連ユーザーコントロール
各画面で使用されているユーザーコントロール内のフォントも統一する必要があります。
## 実装方針
### 方針1: Designerファイルでの直接設定(非推奨)
Designerファイルを直接編集する方法は、Visual Studioのデザイナーで上書きされる可能性があるため推奨しません。
### 方針2: コード内での動的設定(推奨)
各フォームのコンストラクタまたはLoadイベントでフォントを設定します。
### 方針3: 基底クラスの作成(最適解)
すべてのマスタ画面の基底クラスを作成し、フォント設定を一元管理します。
## 実装手順(方針2: コード内での動的設定)
### ステップ1: フォント設定ヘルパークラスの作成
#### 1.1 FontSettingHelper.csの作成
```csharp
using System.Drawing;
using System.Windows.Forms;
namespace ChatworkBulkSender.Utils
{
/// <summary>
/// マスタ画面のフォント設定を統一するヘルパークラス
/// </summary>
public static class FontSettingHelper
{
// フォント名
private const string FONT_NAME = "HG丸ゴシックM-PRO";
// フォントサイズ
private const float TITLE_FONT_SIZE = 22f;
private const float LABEL_FONT_SIZE = 12f;
private const float ITEM_FONT_SIZE = 10f;
private const float BUTTON_FONT_SIZE = 18f;
/// <summary>
/// フォームのタイトルフォントを設定
/// </summary>
public static Font GetTitleFont()
{
return new Font(FONT_NAME, TITLE_FONT_SIZE, FontStyle.Bold);
}
/// <summary>
/// ラベルのフォントを設定
/// </summary>
public static Font GetLabelFont()
{
return new Font(FONT_NAME, LABEL_FONT_SIZE, FontStyle.Bold);
}
/// <summary>
/// 項目(テキストボックス、グリッド等)のフォントを設定
/// </summary>
public static Font GetItemFont()
{
return new Font(FONT_NAME, ITEM_FONT_SIZE, FontStyle.Regular);
}
/// <summary>
/// ボタンのフォントを設定
/// </summary>
public static Font GetButtonFont()
{
return new Font(FONT_NAME, BUTTON_FONT_SIZE, FontStyle.Regular);
}
/// <summary>
/// コントロールとその子コントロールにフォントを適用
/// </summary>
public static void ApplyFontsToControl(Control control)
{
// コントロールの種類に応じてフォントを設定
if (control is Button)
{
control.Font = GetButtonFont();
}
else if (control is Label)
{
// タイトルラベルかどうかを判定(例:サイズや名前で判定)
if (control.Name.Contains("Title") || control.Font.Size > 15)
{
control.Font = GetTitleFont();
}
else
{
control.Font = GetLabelFont();
}
}
else if (control is TextBox || control is ComboBox || control is DataGridView || control is CheckBox || control is RadioButton)
{
control.Font = GetItemFont();
}
// 子コントロールに対して再帰的に適用
foreach (Control child in control.Controls)
{
ApplyFontsToControl(child);
}
}
/// <summary>
/// フォーム全体にフォントを適用
/// </summary>
public static void ApplyFontsToForm(Form form)
{
// フォーム自体のフォントを設定
form.Font = GetItemFont();
// すべてのコントロールに適用
ApplyFontsToControl(form);
}
}
}
```
### ステップ2: 各マスタ画面への適用
#### 2.1 M_CustomerMaster.csの修正
```csharp
private void M_CustomerMaster_Load(object sender, EventArgs e)
{
// 既存のコード...
// フォントの統一設定を適用
FontSettingHelper.ApplyFontsToForm(this);
// ユーザーコントロールにも適用
FontSettingHelper.ApplyFontsToControl(_searchBoxControl);
FontSettingHelper.ApplyFontsToControl(_customerDgvControl);
FontSettingHelper.ApplyFontsToControl(_btnControl);
}
```
#### 2.2 他のマスタ画面への適用
同様の方法で、以下の画面にも適用します:
- M_SendPatternMaster.cs
- M_SenderMaster.cs
- M_CustomerMasterIndividualEdit.cs
- M_SendPatternIndividualEdit.cs
### ステップ3: ユーザーコントロールへの対応
各ユーザーコントロールのコンストラクタまたはLoadイベントで、内部のコントロールにフォントを適用します。
```csharp
public SearchBoxControl()
{
InitializeComponent();
// デザインモードでない場合のみ実行
if (!DesignMode)
{
// フォントの統一設定を適用
FontSettingHelper.ApplyFontsToControl(this);
}
}
```
## テストシナリオ
### シナリオ1: フォントの表示確認
1. 各マスタ画面を開く
2. 以下の要素のフォントを確認:
- タイトル部分:HG丸ゴシックM-PRO 22pt Bold
- ラベル:HG丸ゴシックM-PRO 12pt Bold
- テキストボックス、グリッド:HG丸ゴシックM-PRO 10pt Regular
- ボタン:HG丸ゴシックM-PRO 18pt Regular
### シナリオ2: 文字の表示確認
1. 日本語文字が正しく表示されることを確認
2. 文字が切れたり、重なったりしていないことを確認
### シナリオ3: レイアウトの確認
1. フォント変更によりレイアウトが崩れていないことを確認
2. ボタンやテキストボックスのサイズが適切であることを確認
## 実装の注意点
### 1. フォントの存在確認
HG丸ゴシックM-PROがシステムにインストールされていない場合のフォールバック処理を検討する必要があります。
```csharp
private static bool IsFontInstalled(string fontName)
{
using (var font = new Font(fontName, 10))
{
return font.Name == fontName;
}
}
```
### 2. パフォーマンスへの配慮
- フォントオブジェクトの使い回しを検討
- 不要なフォントオブジェクトの破棄
### 3. デザイナーとの連携
Visual Studioのデザイナーでフォームを開いた際に、設定したフォントが上書きされないよう注意が必要です。
## 実装チェックリスト
### FontSettingHelper.cs
- [ ] クラスの作成
- [ ] 各フォント取得メソッドの実装
- [ ] ApplyFontsToControlメソッドの実装
- [ ] ApplyFontsToFormメソッドの実装
### 各マスタ画面
- [ ] M_CustomerMaster.csへの適用
- [ ] M_SendPatternMaster.csへの適用
- [ ] M_SenderMaster.csへの適用
- [ ] M_CustomerMasterIndividualEdit.csへの適用
- [ ] M_SendPatternIndividualEdit.csへの適用
### ユーザーコントロール
- [ ] SearchBoxControlへの適用
- [ ] CustomerDgvControlへの適用
- [ ] BtnAddMasterControlへの適用
- [ ] その他関連コントロールへの適用
### 動作確認
- [ ] 各画面でフォントが正しく表示されること
- [ ] レイアウトが崩れていないこと
- [ ] 文字が切れたり重なったりしていないこと
## 今後の拡張性
### 1. 設定ファイルからの読み込み
フォント設定を外部設定ファイル(app.config等)から読み込めるようにすることで、柔軟性が向上します。
### 2. ユーザー設定の保存
ユーザーがフォントサイズを変更できるようにし、その設定を保存する機能の追加を検討できます。
### 3. アクセシビリティ対応
視覚障害者向けに、高コントラストモードや大きなフォントサイズへの対応を検討できます。
## まとめ
この実装により、すべてのマスタ画面でフォントが統一され、一貫性のあるユーザーインターフェースが実現されます。FontSettingHelperクラスを使用することで、将来的なフォント変更も容易になります。