using System.Windows.Forms;
using System.Drawing;
namespace ChatworkBulkSender.Utils
{
/// <summary>
/// マスタ画面のレイアウトを統一するヘルパークラス
/// </summary>
public static class LayoutAdjustmentHelper
{
/// <summary>
/// マスタ画面の枠線とボタン配置を統一
/// </summary>
public static void AdjustMasterScreenLayout(Form form,
Control searchBoxControl,
Control dgvControl,
Control btnControl)
{
// nullチェック
if (form == null || searchBoxControl == null ||
dgvControl == null || btnControl == null) return;
// 検索ボックス内の枠線パネルを探す
Panel searchPanel = FindPanelWithBorder(searchBoxControl);
if (searchPanel != null)
{
// 送信履歴画面と同じように左右に余白を設定
searchPanel.Location = new Point(28, searchPanel.Location.Y);
// 左右28pxずつの余白を確保
searchPanel.Width = searchBoxControl.Width - 56;
}
// DataGridViewの枠線スタイルを統一
DataGridView dgv = FindDataGridView(dgvControl);
if (dgv != null)
{
dgv.BorderStyle = BorderStyle.FixedSingle;
// Dockプロパティを確認
if (dgv.Dock != DockStyle.Fill)
{
dgv.Location = new Point(0, 0);
dgv.Width = dgvControl.Width;
}
}
// ボタンの配置を調整
AdjustButtonPositions(btnControl);
}
/// <summary>
/// 枠線を持つパネルを検索
/// </summary>
private static Panel FindPanelWithBorder(Control parent)
{
foreach (Control control in parent.Controls)
{
if (control is Panel panel && panel.BorderStyle != BorderStyle.None)
{
return panel;
}
// 再帰的に検索
Panel found = FindPanelWithBorder(control);
if (found != null) return found;
}
return null;
}
/// <summary>
/// DataGridViewを検索
/// </summary>
private static DataGridView FindDataGridView(Control parent)
{
foreach (Control control in parent.Controls)
{
if (control is DataGridView dgv)
{
return dgv;
}
// 再帰的に検索
DataGridView found = FindDataGridView(control);
if (found != null) return found;
}
return null;
}
/// <summary>
/// ボタンの位置を調整
/// </summary>
private static void AdjustButtonPositions(Control btnControl)
{
Button btnReturn = null;
Button btnCreate = null;
// ボタンを探す
foreach (Control control in btnControl.Controls)
{
if (control is Button btn)
{
if (btn.Text.Contains("戻る"))
{
btnReturn = btn;
}
else if (btn.Text.Contains("新規"))
{
btnCreate = btn;
}
}
}
// 親コントロールのパディングを考慮
int leftPadding = 0;
int rightPadding = 0;
// ボタンの位置を調整
if (btnReturn != null)
{
btnReturn.Anchor = AnchorStyles.Bottom | AnchorStyles.Left;
btnReturn.Location = new Point(leftPadding, btnReturn.Location.Y);
}
if (btnCreate != null)
{
btnCreate.Anchor = AnchorStyles.Bottom | AnchorStyles.Right;
btnCreate.Location = new Point(
btnControl.Width - btnCreate.Width - rightPadding,
btnCreate.Location.Y);
}
}
}
}