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>
private static bool IsFontInstalled(string fontName)
{
using (var font = new Font(fontName, 10))
{
return font.Name == fontName;
}
}
/// <summary>
/// 使用するフォント名を取得(フォールバック付き)
/// </summary>
private static string GetFontName()
{
if (IsFontInstalled(FONT_NAME))
{
return FONT_NAME;
}
else
{
// フォールバックフォント
return "メイリオ";
}
}
/// <summary>
/// フォームのタイトルフォントを設定
/// </summary>
public static Font GetTitleFont()
{
return new Font(GetFontName(), TITLE_FONT_SIZE, FontStyle.Bold);
}
/// <summary>
/// ラベルのフォントを設定
/// </summary>
public static Font GetLabelFont()
{
return new Font(GetFontName(), LABEL_FONT_SIZE, FontStyle.Bold);
}
/// <summary>
/// 項目(テキストボックス、グリッド等)のフォントを設定
/// </summary>
public static Font GetItemFont()
{
return new Font(GetFontName(), ITEM_FONT_SIZE, FontStyle.Regular);
}
/// <summary>
/// ボタンのフォントを設定
/// </summary>
public static Font GetButtonFont()
{
return new Font(GetFontName(), BUTTON_FONT_SIZE, FontStyle.Regular);
}
/// <summary>
/// コントロールとその子コントロールにフォントを適用
/// </summary>
public static void ApplyFontsToControl(Control control)
{
// nullチェック
if (control == null) return;
// コントロールの種類に応じてフォントを設定
if (control is Button)
{
control.Font = GetButtonFont();
}
else if (control is Label)
{
// タイトルラベルかどうかを判定(例:サイズや名前で判定)
if (control.Name.Contains("Title") || control.Name.Contains("title") ||
control.Name.Contains("Header") || control.Name.Contains("header") ||
control.Font.Size > 15)
{
control.Font = GetTitleFont();
}
else
{
control.Font = GetLabelFont();
}
}
else if (control is TextBox || control is ComboBox || control is CheckBox ||
control is RadioButton || control is ListBox)
{
control.Font = GetItemFont();
}
else if (control is DataGridView)
{
var dgv = control as DataGridView;
dgv.Font = GetItemFont();
// ヘッダーのフォントも設定
dgv.ColumnHeadersDefaultCellStyle.Font = GetLabelFont();
}
else if (control is GroupBox)
{
control.Font = GetLabelFont();
}
// 子コントロールに対して再帰的に適用
foreach (Control child in control.Controls)
{
ApplyFontsToControl(child);
}
}
/// <summary>
/// フォーム全体にフォントを適用
/// </summary>
public static void ApplyFontsToForm(Form form)
{
// nullチェック
if (form == null) return;
// フォーム自体のフォントを設定
form.Font = GetItemFont();
// すべてのコントロールに適用
ApplyFontsToControl(form);
}
}
}