using KssSmaPlaLib.Ini; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace KssSmaPlaLib.Forms { public static class FormHelper { /// /// フォームのコンストラクタで行う処理集 /// /// public static void FormConstructorProc(Form frm) { frm.KeyPreview = true; FormHelper.SetTitle(frm); foreach (var control in frm.Controls) { if (control is DataGridView) { // DGVで行う共通処理 var dgv = control as DataGridView; dgv.Dock = DockStyle.Fill; dgv.AllowUserToResizeRows = false; dgv.AllowUserToAddRows = false; dgv.AllowUserToDeleteRows = false; dgv.AllowUserToOrderColumns = false; dgv.AllowUserToResizeColumns = true; dgv.AllowUserToResizeRows = false; dgv.ReadOnly = true; dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgv.RowHeadersVisible = false; dgv.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; // 列ヘッダのユーザによるソートを無効化する foreach (DataGridViewColumn col in dgv.Columns) col.SortMode = DataGridViewColumnSortMode.NotSortable; } } } /// /// フォームのロードで行う処理集 /// /// /// public static void FormLoadProc(Form frm, ContextMenuStrip[] menus, bool isDgvColAutoFit = false) { FormHelper.LoadFormBounds(frm); foreach (var control in frm.Controls) { if (control is DataGridView) { // DGVで行う共通処理 var dgv = control as DataGridView; DgvHelper.DgvLoadColVisible(dgv); DgvHelper.DgvLoadColDisplayIndex(dgv); DgvHelper.DgvLoadColFrozen(dgv); if (isDgvColAutoFit) { DgvHelper.DgvColumnWidthAutoAdjust(dgv); } else { DgvHelper.DgvLoadColWidth(dgv); } DgvHelper.DgvLoadFontFromIni(dgv); } } foreach (var menu in menus) { ContextMenuHelper.SetFont(frm, menu); } } /// /// フォーム閉じるときの処理集 /// /// public static void FormClosingProc(Form frm) { FormHelper.SaveFormBounds(frm); foreach (var control in frm.Controls) { if (control is DataGridView) { // DGVで行う共通処理 var dgv = control as DataGridView; DgvHelper.DgvSaveColVisible(dgv); DgvHelper.DgvSaveColDisplayIndex(dgv); DgvHelper.DgvSaveColFrozen(dgv); DgvHelper.DgvSaveColWidth(dgv); DgvHelper.DgvSaveFontToIni(dgv); } } } private const string INI_KEY_RESTORE_BOUNDS_CSV = "RestoreBoundsCsv"; /// /// フォームのバウンズ保存 /// ※フォームのClosingイベントでCallしてください。 /// /// public static void SaveFormBounds(Form form) { var csv = string.Empty; if (form.WindowState == FormWindowState.Maximized || form.WindowState == FormWindowState.Minimized) { csv = $"{form.RestoreBounds.Width},{form.RestoreBounds.Height},{form.RestoreBounds.Top},{form.RestoreBounds.Left},{form.WindowState == FormWindowState.Maximized}"; } else { csv = $"{form.Bounds.Width},{form.Bounds.Height},{form.Bounds.Top},{form.Bounds.Left},{form.WindowState == FormWindowState.Maximized}"; } IniHelper.WriteValue(null, form.Name, INI_KEY_RESTORE_BOUNDS_CSV, csv); } /// /// フォームのバウンズ復元 /// ※フォームのLoadイベントでCallしてください。 /// /// public static void LoadFormBounds(Form form) { var csv = IniHelper.ReadValue(null, form.Name, INI_KEY_RESTORE_BOUNDS_CSV); if (string.IsNullOrEmpty(csv)) return; var items = csv.Split(','); if (items.Length != 5) return; if (!int.TryParse(items[0], out var width)) return; if (!int.TryParse(items[1], out var height)) return; if (!int.TryParse(items[2], out var top)) return; if (!int.TryParse(items[3], out var left)) return; if (!bool.TryParse(items[4], out var isMaximum)) return; form.Bounds = new System.Drawing.Rectangle(left, top, width, height); if (isMaximum) form.WindowState = FormWindowState.Maximized; } private const string KEY_NAME_TITLE = "Title"; /// /// タイトル設定(INI優先) /// ※フォームのコンストラクタでCallしてください /// /// public static void SetTitle(Form form) { form.Text = IniHelper.ReadValue(null, form.Name, KEY_NAME_TITLE, form.Text); } /// /// フォームの画面キャプチャを取得し画像ファイルに保存する /// /// /// public static void GetCaptureAndSaveBitmap(Form form, string bitmapFilePath) { // フォームと同じサイズのBitmapを作成 Bitmap bitmap = new Bitmap(form.Width, form.Height); // Bitmapにフォームの内容を描画 form.DrawToBitmap(bitmap, new Rectangle(0, 0, form.Width, form.Height)); // 画像ファイルとして保存 bitmap.Save(bitmapFilePath, System.Drawing.Imaging.ImageFormat.Jpeg); // リソースの解放 bitmap.Dispose(); } } }