Forms/M_SendPatternMaster.cs

/*
 * Copyright INDEX Co.
 */

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using ChatworkBulkSender.UserControls;

namespace ChatworkBulkSender.Forms
{

    public partial class M_SendPatternMaster : Form
    {
        private PatternSearchBoxControl _patternSearchBoxControl = null;

        private PattrernDgvControl _pattrernDgvControl = null;

        private BtnAddMasterControl _btnControl = null;

        public M_SendPatternMaster()
        {
            InitializeComponent();

            // 初期画面のサイズ
            this.ClientSize = new Size(1600,900);

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

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


            _patternSearchBoxControl = new PatternSearchBoxControl();
            _patternSearchBoxControl.Dock = DockStyle.Fill;
            _pattrernDgvControl = new PattrernDgvControl();
            _pattrernDgvControl.Dock = DockStyle.Fill;
            _btnControl = new BtnAddMasterControl();
            _btnControl.Dock = DockStyle.Fill;

            panelSearch.Controls.Add(_patternSearchBoxControl);
            panelDgv.Controls.Add(_pattrernDgvControl);
            panelBtn.Controls.Add(_btnControl);

            this.ActiveControl = panelSearch;
        }

        private void M_SenderPatternMaster_Load(object sender, EventArgs e)
        {
            // 戻るボタンのクリックイベントの登録
            _btnControl.BtnReturnClicked += BtnReturn_Click;

            _btnControl.BtnCreateAddClicked += BtnCreateAdd_Click;

            //検索イベント
            _patternSearchBoxControl.SearchRequested += PatternSearchBoxControl_SearchRequested;
        }

        /// <summary>
        /// 戻るボタンのクリックの時にフォームを閉じる
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnReturn_Click(object sender, EventArgs e)
        {
            // フォームを閉じる
            this.Close();
        }

        private void BtnCreateAdd_Click(object sender, EventArgs e)
        {
            this.Hide();

            M_SendPatternIndividualEdit individualEdit = new M_SendPatternIndividualEdit();

            individualEdit.Owner = this;

            individualEdit.Show();
        }

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

            // 削除だけでは解放されないので、明示的に解放する
            _patternSearchBoxControl.Dispose();
            _pattrernDgvControl.Dispose();
            _btnControl.Dispose();
        }

        private void PatternSearchBoxControl_SearchRequested(object sender, Dictionary<string,object> criteria)
        {
            _pattrernDgvControl.Search(criteria);
        }

        private void M_SenderPatternMaster_FormClosing(object sender, FormClosingEventArgs e)
        {
            DialogResult result = MessageBox.Show("送信パターンマスタ画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

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

                return;
            }

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

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

            // 設定メニューを表示する
            this.Owner.Show();

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