UserControls/PatternDropDownControl.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ChatworkBulkSender.Daos;
using ChatworkBulkSender.Dtos;

namespace ChatworkBulkSender.UserControls
{
    public partial class PatternDropDownControl : AbstractUserControl
    {
        /// <summary>
        /// PatternSelectedイベント用のカスタムEventArgs
        /// </summary>
        public class PatternSelectedEventArgs : EventArgs
        {
            public PatternMasterDto SelectedPattern { get; }
            public PatternSelectedEventArgs(PatternMasterDto pattern)
            {
                SelectedPattern = pattern ?? throw new ArgumentNullException(nameof(pattern));
            }
        }

        /// <summary>
        /// パターン名称コンボ変更時のEventHandler(親フォーム通知用)
        /// </summary>
        public event EventHandler<PatternSelectedEventArgs> PatternSelected;

        public PatternDropDownControl()
        {
            InitializeComponent();
            if (IsInDesignMode()) return;
            Init();
        }

        /// <summary>
        ///  現在選択中のパターンマスタを返す
        /// </summary>
        /// <returns></returns>
        public PatternMasterDto GetSelectedPatternMaster()
        {
            if (cmbPatternName.SelectedItem is PatternMasterDto dto)
            {
                return dto;
            }
            return null;
        }

        /// <summary>
        /// パターン情報をセットする
        /// </summary>
        /// <param name="patternId"></param>
        public void SetPatternData(int? patternId)
        {
            // パターン未設定であれば終了
            if (patternId == null) return;
            // パターンをセット
            cmbPatternName.SelectedValue = patternId.Value;
            // 念のため、マッチする項目がなければ初期化
            if (cmbPatternName.SelectedIndex == -1)
            {
                cmbPatternName.SelectedValue = null;
            }
        }



        private void Init()
        {
            // ドロップダウン初期化
            // DAO を呼び出してテンプレート一覧を取得
            var dao = new PatternMasterDao();
            List<PatternMasterDto> patterns = dao.GetPatterns();

            // ComboBox にバインド
            cmbPatternName.DisplayMember = nameof(PatternMasterDto.PatternName);  // 表示文字列
            cmbPatternName.ValueMember = nameof(PatternMasterDto.PatternId);      // 実体の値
            cmbPatternName.DataSource = patterns;
            cmbPatternName.SelectedIndex = -1;  // 初期選択なし
        }

        private void cmbPatternName_SelectedIndexChanged(object sender, EventArgs e)
        {
            // 選択中のパターンが変わった事を通知
            if (cmbPatternName.SelectedItem is PatternMasterDto dto)
            {
                PatternSelected?.Invoke(this, new PatternSelectedEventArgs(dto));
            }
        }
    }
}