for Push.
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// フォームのコンストラクタで行う処理集
|
||||
/// </summary>
|
||||
/// <param name="frm"></param>
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォームのロードで行う処理集
|
||||
/// </summary>
|
||||
/// <param name="frm"></param>
|
||||
/// <param name="isDgvColAutoFit"></param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォーム閉じるときの処理集
|
||||
/// </summary>
|
||||
/// <param name="frm"></param>
|
||||
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";
|
||||
|
||||
/// <summary>
|
||||
/// フォームのバウンズ保存
|
||||
/// ※フォームのClosingイベントでCallしてください。
|
||||
/// </summary>
|
||||
/// <param name="form"></param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォームのバウンズ復元
|
||||
/// ※フォームのLoadイベントでCallしてください。
|
||||
/// </summary>
|
||||
/// <param name="form"></param>
|
||||
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";
|
||||
|
||||
/// <summary>
|
||||
/// タイトル設定(INI優先)
|
||||
/// ※フォームのコンストラクタでCallしてください
|
||||
/// </summary>
|
||||
/// <param name="form"></param>
|
||||
public static void SetTitle(Form form)
|
||||
{
|
||||
form.Text = IniHelper.ReadValue(null, form.Name, KEY_NAME_TITLE, form.Text);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// フォームの画面キャプチャを取得し画像ファイルに保存する
|
||||
/// </summary>
|
||||
/// <param name="form"></param>
|
||||
/// <param name="bitmapFilePath"></param>
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user