UserControls/HistorySearchBoxControl.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;

namespace ChatworkBulkSender.UserControls
{
    public partial class HistorySearchBoxControl : UserControl
    {
        public event EventHandler<Dictionary<string, object>> SearchRequested;

        private int _pnlSearchCurrentX;

        public HistorySearchBoxControl()
        {
            InitializeComponent();

            _pnlSearchCurrentX = panelSearchBox.Width;

            // デフォルト表示は空文字
            dateTimePickerStart.CustomFormat = " ";
            dateTimePickerEnd.CustomFormat = " ";

            dateTimePickerStart.Checked = false;
            dateTimePickerEnd.Checked = false;
            rdoScheduleSendSelection.Checked = true;

            // 検索ボタンのイベントハンドラを設定
            btnSearch.Click += BtnSearch_Click;

            // Dockを使用して親パネル全体を使用
            this.Dock = DockStyle.Fill;
        }

        /// <summary>
        /// 選択時に日付を西暦/月/日のフォーマットで表示する。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dateTimePickerStart_ValueChanged(object sender, EventArgs e)
        {
            dateTimePickerStart.CustomFormat = "yyyy/MM/dd";
        }

        /// <summary>
        /// 選択時に日付を西暦/月/日のフォーマットで表示する。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void dateTimePickerEnd_ValueChanged(object sender, EventArgs e)
        {
            dateTimePickerEnd.CustomFormat = "yyyy/MM/dd";
        }

        private void panelSearchBox_Resize(object sender, EventArgs e)
        {
            int Width = _pnlSearchCurrentX - panelSearchBox.Width;

            customerNameTxtBox.Width -= Width;
        }

        /// <summary>
        /// 検索ボタンクリック
        /// </summary>
        private void BtnSearch_Click(object sender, EventArgs e)
        {
            var criteria = GetSearchCriteria();
            SearchRequested?.Invoke(this, criteria);
        }

        /// <summary>
        /// 検索条件を取得
        /// </summary>
        private Dictionary<string, object> GetSearchCriteria()
        {
            var criteria = new Dictionary<string, object>();

            // 管理番号
            if (!string.IsNullOrWhiteSpace(mgmtNumberTxtBox.Text))
            {
                criteria["ManagementNumber"] = mgmtNumberTxtBox.Text.Trim();
            }

            // パターン名称
            if (!string.IsNullOrWhiteSpace(PattrernNameTxtBox.Text))
            {
                criteria["PatternName"] = PattrernNameTxtBox.Text.Trim();
            }

            // 顧客名
            if (!string.IsNullOrWhiteSpace(customerNameTxtBox.Text))
            {
                criteria["CustomerName"] = customerNameTxtBox.Text.Trim();
            }

            // 送信日時(開始)
            if (dateTimePickerStart.Checked)
            {
                criteria["StartDate"] = dateTimePickerStart.Value.Date;
            }

            // 送信日時(終了)
            if (dateTimePickerEnd.Checked)
            {
                criteria["EndDate"] = dateTimePickerEnd.Value.Date.AddDays(1).AddSeconds(-1);
            }

            // 送信タイプ
            if (rdoScheduleSendSelection.Checked)
            {
                criteria["SendType"] = 0; // 定期送信
            }
            else if (rdoManualSendSelection.Checked)
            {
                criteria["SendType"] = 1; // 不定期送信
            }

            return criteria;
        }

    }
}