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));
}
}
}
}