From 1a1c8e71fcd14858f595029f089b2d4a00202b32 Mon Sep 17 00:00:00 2001
From: ogi <Administrator@S-OGI-PC>
Date: Fri, 05 Dec 2025 09:24:16 +0900
Subject: [PATCH] プロジェクトファイルを追加。

---
 HotelPms.WinForm.Common/MasterBase.cs |  394 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 394 insertions(+), 0 deletions(-)

diff --git a/HotelPms.WinForm.Common/MasterBase.cs b/HotelPms.WinForm.Common/MasterBase.cs
new file mode 100644
index 0000000..81a0982
--- /dev/null
+++ b/HotelPms.WinForm.Common/MasterBase.cs
@@ -0,0 +1,394 @@
+using HotelPms.Share.Windows.Component;
+using HotelPms.Share.Windows.Tool;
+using HotelPms.Share.Windows.Util;
+using HotelPms.WinForm.Common.Interface;
+using System.Data;
+
+namespace HotelPms.WinForm.Common
+{
+    public partial class MasterBase : FormBase
+    {
+        #region  ★★★★★ Declartions ★★★★★
+
+        protected DataTable? m_Data;
+        protected bool m_DisableSelectionChanged = false;
+        protected CTextBoxArray? tbArray;
+        protected ValueChangeListener? m_ValueChangeListener = null;
+        protected static string DelMsg = "選択されたデータを削除しますか?";
+        protected static string ExistsMsg = "該当データが既に存在します。";
+        protected static string NotExistsMsg = "指定したコードがマスタに存在しません。";
+        protected static string LockMsg = $"現在の情報は他の端末か他の機能で更新済です。{Environment.NewLine}最新情報を取得しますか?";
+        protected Dictionary<string, string> m_GridColNameDict = new Dictionary<string, string>();
+
+        #endregion
+
+        #region  ★★★★★ Property ★★★★★
+
+        public IMasterCtrl? MasterCtrl { get; set; }
+
+        #endregion
+
+        #region  ★★★★★ Class Event ★★★★★
+
+        public MasterBase() => InitializeComponent();
+
+        private void MasterBase_Load(object sender, EventArgs e)
+        {
+            if (DesignMode) { return; }
+            System.Diagnostics.Debug.WriteLine("MasterBase_Load");
+            InitGrid();
+
+            tbArray = new CTextBoxArray(true, this);
+            tbArray.ValueChanged += CTextBoxArray_ValueChanged;
+            tbArray.IsCorrectEtc += CTextBoxArray_IsCorrectEtc;
+            tbArray.KeyEnd += CTextBoxArray_KeyEnd;
+            tbArray.TextChanged += CTextBoxArray_TextChanged;
+            tbArray.BeforeAutoNextFocus += CTextBoxArray_BeforeAutoNextFocus;
+
+            m_ValueChangeListener = new ValueChangeListener(lblStatus);
+            m_ValueChangeListener.SetUpdateFormMode(UpdateFormMode.Normal);
+        }
+
+        private void MasterBase_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            if (DesignMode) { return; }
+            //編集中の時に警告メッセージを出す
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
+            {
+                switch (ExitDialog.ExecuteDialog())
+                {
+                    case DialogResult.Cancel:
+                        e.Cancel = true;
+                        return;
+                    case DialogResult.OK:
+                        tbArray.DisbleValidating = true;
+                        if (!MasterCtrl.Save())
+                        {
+                            e.Cancel = true;
+                            return;
+                        }
+                        tbArray.DisbleValidating = false;
+                        break;
+                    case DialogResult.Abort:
+                        break;
+                }
+            }
+        }
+
+        private void MasterBase_KeyDown(object sender, KeyEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Escape:
+                    ActiveControl = btnExit;
+                    btnExit_Click(btnExit, e);
+                    e.Handled = true;
+                    break;
+                case Keys.F1:
+                    ActiveControl = btnNew;
+                    btnNew_Click(btnExit, e);
+                    e.Handled = true;
+                    break;
+                case Keys.F2:
+                    ActiveControl = btnEdit;
+                    btnEdit_Click(btnExit, e);
+                    e.Handled = true;
+                    break;
+                case Keys.F12:
+                    ActiveControl = btnSave;
+                    btnSave_Click(btnExit, e);
+                    e.Handled = true;
+                    break;
+            }
+        }
+
+        private void MasterBase_FormClosed(object sender, FormClosedEventArgs e)
+        {
+            if (DesignMode) { return; }
+            if (m_Data != null) { m_Data.Dispose(); m_Data = null; }
+            if (m_ValueChangeListener != null) { m_ValueChangeListener.Dispose(); m_ValueChangeListener = null; }
+            System.Diagnostics.Debug.WriteLine("MasterBase_FormClosed");
+        }
+
+        #endregion
+
+        #region  ★★★★★ Control Event ★★★★★
+
+        private void txtSearchKey_KeyDown(object sender, KeyEventArgs e)
+        {
+            if (e.KeyCode == Keys.Return)
+            {
+                MasterCtrl.ShowData();
+            }
+        }
+
+        private void btnSave_Click(object sender, EventArgs e)
+        {
+            MasterCtrl.Save();
+        }
+
+        private void btnExit_Click(object sender, EventArgs e)
+        {
+            Close();
+        }
+
+        private void btnNew_Click(object sender, EventArgs e)
+        {
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.New) { return; }
+
+            //編集中の時に警告メッセージを出す
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
+            {
+                switch (ExitDialog.ExecuteDialog())
+                {
+                    case DialogResult.Cancel:
+                        return;
+                    case DialogResult.OK:
+                        tbArray.DisbleValidating = true;
+                        if (!MasterCtrl.Save()) { return; }
+                        tbArray.DisbleValidating = false;
+                        break;
+                    case DialogResult.Abort:
+                        break;
+                }
+            }
+
+            SetNewMode();
+        }
+
+        private void btnEdit_Click(object sender, EventArgs e)
+        {
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Normal || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit) { return; }
+            if (dgvData.Rows.Count == 0) { return; }
+
+            //編集中の時に警告メッセージを出す
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting)
+            {
+                switch (ExitDialog.ExecuteDialog())
+                {
+                    case DialogResult.Cancel:
+                        return;
+                    case DialogResult.OK:
+                        tbArray.DisbleValidating = true;
+                        if (!MasterCtrl.Save()) { return; }
+                        tbArray.DisbleValidating = false;
+                        break;
+                    case DialogResult.Abort:
+                        break;
+                }
+            }
+
+            //閲覧へ
+            MasterCtrl.ShowDetail();
+        }
+
+        private void dgvData_SelectionChanged(object sender, EventArgs e)
+        {
+            if (m_DisableSelectionChanged) { return; }
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.New || m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Inputting) { return; }
+
+            if (m_ValueChangeListener.CurUpdateMode == UpdateFormMode.Edit)
+            {
+                tbArray.DisbleValidating = true;
+                MasterCtrl.Save();
+                tbArray.DisbleValidating = false;
+            }
+            MasterCtrl.ShowDetail();
+        }
+
+        private void dgvData_CellClick(object sender, DataGridViewCellEventArgs e)
+        {
+            if (e.RowIndex < 0 || e.ColumnIndex < 0) { return; }
+            if (e.ColumnIndex == dgvData.Columns["colDel"].Index) { MasterCtrl.Delete(); }
+        }
+
+
+        protected virtual void CTextBoxArray_BeforeAutoNextFocus(object sender, int index, KeyEventArgs e)
+        {
+            switch (e.KeyCode)
+            {
+                case Keys.Return:
+                    if (tbArray.Items[index].Equals(tbArray.Items[tbArray.Items.Count - 1])) { btnSave.Focus(); }
+                    break;
+            }
+        }
+
+        protected virtual void CTextBoxArray_TextChanged(object sender, int index, EventArgs e)
+        {
+            tbArray.DisbleTextChanged = true;
+            //名称をクリア
+            if (tbArray.Items[index].MstNameCtrl != null) { tbArray.Items[index].MstNameCtrl.Text = string.Empty; }
+            tbArray.DisbleTextChanged = false;
+        }
+
+        protected virtual void CTextBoxArray_KeyEnd(object sender, int index, KeyEventArgs e)
+        {
+            MasterCtrl.ShowList(tbArray.Items[index]);
+        }
+
+        protected virtual bool CTextBoxArray_IsCorrectEtc(object sender, int index, CTextBoxArrayBaseEventArgs e)
+        {
+            if (m_ValueChangeListener.CurUpdateMode != UpdateFormMode.Inputting && m_ValueChangeListener.CurUpdateMode != UpdateFormMode.Edit) { return true; }
+
+            try
+            {
+                CTextBox obj = tbArray.Items[index];
+                if (!MasterCtrl.IsCorrectEtc(obj, e.CheckAll, e.ShowErrMsg)) { return false; }
+
+                //コード存在チェック
+                if (obj.Text.Length > 0 && obj.MstNameCtrl != null)
+                {
+                    if (!IsCDExists(obj))
+                    {
+                        if (e.ShowErrMsg)
+                        {
+                            ShowIDErrMsg(obj);
+                            return false;
+                        }
+                        else
+                        {
+                            obj.Text = obj.OrgText;
+                            IsCDExists(obj);
+                            return true;
+                        }
+                    }
+                }
+                return true;
+            }
+            catch (Exception ex)
+            {
+                if (e.ShowErrMsg) { MessageBox.Show(ex.Message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); }
+                return false;
+            }
+        }
+
+        protected virtual void CTextBoxArray_ValueChanged(object sender, int index, CTextBoxArrayBaseEventArgs e)
+        {
+            //編集状態
+            switch (m_ValueChangeListener.ChangeToEditingMode())
+            {
+                case ChangeEditingModeResult.Error:
+                    e.Cancel = true;
+                    return;
+                case ChangeEditingModeResult.ReLoad:
+                    e.Cancel = true;
+                    e.ResetOrgValue = false;
+                    return;
+            }
+        }
+
+
+        #endregion
+
+        #region  ★★★★★ Private Function ★★★★★
+
+        private void InitGrid()
+        {
+            GeneralSub.SetDoubleBuffered(dgvData);
+            GeneralSub.InitDataGridView(dgvData, true);
+            //dgvData.RowsDefaultCellStyle.BackColor = Color.FromArgb(60, 63, 65);
+            //dgvData.RowsDefaultCellStyle.ForeColor = Color.White;
+
+            dgvData.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
+            //dgvData.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(60, 63, 65);
+            dgvData.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(240, 240, 240);
+            dgvData.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
+            dgvData.ColumnHeadersDefaultCellStyle.SelectionBackColor = dgvData.ColumnHeadersDefaultCellStyle.BackColor;
+
+            dgvData.DefaultCellStyle.SelectionBackColor = Color.LemonChiffon;
+            dgvData.DefaultCellStyle.SelectionForeColor = Color.Black;
+
+            //DataGridViewButtonColumn col = new DataGridViewButtonColumn();
+            DataGridViewLinkColumn col = new DataGridViewLinkColumn();
+            col.Name = "colDel";
+            col.Text = "削除";
+            col.HeaderText = string.Empty;
+            //col.UseColumnTextForButtonValue = true;
+            col.UseColumnTextForLinkValue = true;
+            col.Width = 50;
+            col.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
+
+
+            dgvData.Columns.Add(col);
+        }
+
+        protected void SetGridColNameDict()
+        {
+            m_GridColNameDict.Clear();
+            foreach (DataGridViewColumn col in dgvData.Columns)
+            {
+                if (string.IsNullOrEmpty(col.DataPropertyName)) { continue; }
+                m_GridColNameDict.Add(col.DataPropertyName, col.Name);
+            }
+        }
+
+        protected object GetCellValue(string dataField)
+        {
+            return GetCellValue(dataField, dgvData.CurrentRow);
+        }
+
+        protected object GetCellValue(string dataField, DataGridViewRow row)
+        {
+            return row.Cells[m_GridColNameDict[dataField]].Value;
+        }
+
+        protected virtual void SetNewMode()
+        {
+            tbArray.DisbleValidating = true;
+            foreach (TextBox item in tbArray.Items)
+            {
+                if ((item as CTextBox).IsPrimaryKey) { (item as CTextBox).Enabled = true; }
+                (item as CTextBox).Text = string.Empty;
+            }
+            this.ActiveControl = tbArray.Items[0];
+            m_ValueChangeListener.SetUpdateFormMode(UpdateFormMode.New);
+            tbArray.DisbleValidating = false;
+        }
+
+
+        /// <summary>
+        /// コードの存在チェック
+        /// </summary>
+        /// <returns></returns>
+        protected bool IsCDExists(CTextBox sender)
+        {
+            MasterCtrl.SetDispName(sender);
+            return sender.MstNameCtrl.Text.Length > 0;
+        }
+
+        /// <summary>
+        /// 指定コードが存在しない時のエラーメッセージ
+        /// </summary>
+        protected void ShowIDErrMsg(CTextBox sender)
+        {
+            MessageBox.Show(NotExistsMsg, sender.TipText, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
+        }
+
+        /// <summary>
+        /// 項目遷移(Mouse、キー以外でコードからFocus()を使う)の時に、
+        /// 前の項目のValidatingイベント発生しないようにしないといけない
+        /// </summary>
+        /// <param name="ctrl"></param>
+        protected void SetCellFocus(int row, int col, bool isFocus)
+        {
+            try
+            {
+                m_DisableSelectionChanged = true;
+                dgvData.Rows[row].Cells[col].Selected = true;
+                dgvData.CurrentCell = dgvData.Rows[row].Cells[col];
+                if (isFocus) { dgvData.Focus(); }
+            }
+            catch { }
+            finally
+            {
+                m_DisableSelectionChanged = false;
+            }
+        }
+
+
+        #endregion
+
+        #region  ★★★★★ Public  Function ★★★★★
+        #endregion
+    }
+}

--
Gitblit v1.10.0