Forms/MainForm.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 MainForm : Form
    {
        // メインメニューのユーザーコントロール
        private MainMenuControl _mainMenuControl = null;

        // 設定メニューのユーザーコントロール
        private ConfigMenuControl _configMenuControl = null;

        public MainForm()
        {
            InitializeComponent();

            this.ActiveControl = null;

            // 画面サイズの指定
            this.ClientSize = new Size(800, 620);

            // ウィンドウサイズを固定
            this.FormBorderStyle = FormBorderStyle.FixedSingle;

            // 最大化ボタンを無効にする
            this.MaximizeBox = false;

            // キャッシュを保持する
            this._mainMenuControl = new MainMenuControl();
            this._configMenuControl = new ConfigMenuControl();

            panelMainForm.Controls.Add(_mainMenuControl);
            panelMainForm.Dock = DockStyle.Fill;

        }

        private void ViewMain_Load(object sender, EventArgs e)
        {
            // メインメニューのクリックイベントの登録
            this._mainMenuControl.ConfigBtn_Clicked += OnConfigBtn_Clicked;
            this._mainMenuControl.CloseBtn_Clicked += BtnClose_Clicked;

            // 設定メニューのクリックイベントの登録
            this._configMenuControl.MainBtn_Clicked += OnMainBtn_Clicked;
            this._configMenuControl.CloseBtn_Clicked += BtnClose_Clicked;
            

        }

        /// <summary>
        /// 設定ボタンのクリック時、設定メニューへ遷移する。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnConfigBtn_Clicked(object sender, EventArgs e)
        {
            // キャッシュの参照がない場合、再取得する
            if (this._configMenuControl == null)
            {
                this._configMenuControl = new ConfigMenuControl();
            }
            panelMainForm.Controls.Clear();
            panelMainForm.Controls.Add(_configMenuControl);
            panelMainForm.Dock = DockStyle.Fill;
        }

        /// <summary>
        /// メインメニューボタンのクリック時、メインメニューへ遷移する。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnMainBtn_Clicked(object sender, EventArgs e)
        {
            // キャッシュの参照がない場合、再取得する
            if (this._mainMenuControl == null)
            {
                this._mainMenuControl = new MainMenuControl();
            }
            panelMainForm.Controls.Clear();
            panelMainForm.Controls.Add(_mainMenuControl);
            panelMainForm.Dock = DockStyle.Fill;
            
        }

        /// <summary>
        /// フォームを閉じ、アプリケーションを終了する
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnClose_Clicked(object sender, EventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// フォームに表示するユーザーコントロールをパネルから削除した後、明示的なDisposeで解放する。
        /// </summary>
        private void DisposeViewControls()
        {
            panelMainForm.Controls.Clear();

            _mainMenuControl.Dispose();

            _configMenuControl.Dispose();
        }

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result = MessageBox.Show("アプリケーションを終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

            if (result == DialogResult.No)
            {
                e.Cancel = true;

                return;
            }

            // イベント登録の解除
            this._mainMenuControl.ConfigBtn_Clicked -= OnConfigBtn_Clicked;
            this._mainMenuControl.CloseBtn_Clicked -= BtnClose_Clicked;
            this._configMenuControl.MainBtn_Clicked -= OnMainBtn_Clicked;
            this._configMenuControl.CloseBtn_Clicked -= BtnClose_Clicked;

            // 明示的に開放する
            this.DisposeViewControls();

        }
    }
}