Forms/M_SenderMaster.cs

/*
 * Copyright XXXX Co.
 */

using System;
using System.Drawing;
using System.Windows.Forms;
using ChatworkBulkSender.UserControls;
using ChatworkBulkSender.Utils;

namespace ChatworkBulkSender.Forms
{
    public partial class M_SenderMaster : Form
    {
        private SenderInfoControl _senderInfo;
        
        // 追加:戻るボタンからの終了フラグ
        private bool _isReturnButtonClicked = false;

        public M_SenderMaster()
        {
            InitializeComponent();

            this.ActiveControl = null;

            this.ClientSize = new Size(1200,400);

            // ウィンドウサイズを固定にする
            this.FormBorderStyle = FormBorderStyle.FixedSingle;
            
            // 最大化ボタンを無効化
            this.MaximizeBox = false;
            
            // パネルに余白を設定(四方20ピクセル)
            this.Padding = new Padding(20);

            // 現在の画面の中央に表示する
            this.StartPosition = FormStartPosition.CenterScreen;

            _senderInfo = new SenderInfoControl();

            _senderInfo.Dock = DockStyle.Fill;

            panel.Controls.Add(_senderInfo);

            this.ActiveControl = panel;

        }

        private void M_SenderMaster_Load(object sender, EventArgs e)
        {
            // 戻るボタンのクリックイベントの登録
            _senderInfo.BtnReturnClicked += this.BtnReturn_Click;
            
            // フォントの統一設定を適用
            FontSettingHelper.ApplyFontsToForm(this);
            
            // ユーザーコントロールにも適用
            FontSettingHelper.ApplyFontsToControl(_senderInfo);
            
            // TabIndexの設定(フォーカス順制御)
            TabIndexHelper.SetSenderMasterTabOrder(this, _senderInfo);
        }

        /// <summary>
        /// 戻るボタンのクリック時にフォームを閉じる
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnReturn_Click(object sender, EventArgs e)
        {
            // 戻るボタンからの終了であることを示すフラグを設定
            _isReturnButtonClicked = true;
            // フォームを閉じる
            this.Close();
        }

        private void M_SenderMaster_FormClosing(object sender, FormClosingEventArgs e)
        {
            // 戻るボタンからの終了の場合は確認メッセージをスキップ
            if (!_isReturnButtonClicked)
            {
                // 親ウィンドウ(this)を渡し、表示場所が同じ画面位置になるように調整
                DialogResult result = MessageBox.Show("送信者情報マスタ画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.No)
                {
                    e.Cancel = true;

                    return;
                }
            }

            // イベント登録の解除
            _senderInfo.BtnReturnClicked -= this.BtnReturn_Click;

            // 明示的に解放する
            _senderInfo.Dispose();

            if (this.Owner != null)
            {
                // 設定メニューを表示する 
                this.Owner.Show();

                // 再描写を行う
                this.Owner.Refresh();
            }
        }
    }
}