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.Share.Windows/Util/CTextBoxArray.cs | 680 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 680 insertions(+), 0 deletions(-)
diff --git a/HotelPms.Share.Windows/Util/CTextBoxArray.cs b/HotelPms.Share.Windows/Util/CTextBoxArray.cs
new file mode 100644
index 0000000..43a7daf
--- /dev/null
+++ b/HotelPms.Share.Windows/Util/CTextBoxArray.cs
@@ -0,0 +1,680 @@
+using System;
+using System.ComponentModel;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using HotelPms.Share.Util;
+using System.Drawing;
+using HotelPms.Share.Windows.Component;
+
+namespace HotelPms.Share.Windows.Util
+{
+ public class CTextBoxArray
+ {
+ private class ItemsComparer : IComparer<CTextBox>
+ {
+ public int Compare(CTextBox x, CTextBox y)
+ {
+ if (x == null)
+ {
+ return (y == null ? 0 : -1);
+ }
+ else
+ {
+ if (y == null)
+ {
+ return 1;
+ }
+ else
+ {
+ return x.TabIndex.CompareTo(y.TabIndex);
+ }
+ }
+ }
+ }
+ private ItemsComparer itemsComparer = new ItemsComparer();
+
+ public delegate void TBArrayEventHandler(object sender, int index, CTextBoxArrayBaseEventArgs e);
+ public delegate bool TBArrayResultEventHandler(object sender, int index, CTextBoxArrayBaseEventArgs e);
+ public delegate void TBArrayValidatingEventHandler(object sender, int index, CancelEventArgs e);
+ public delegate void TBArrayKeyDownEventHandler(object sender, int index, KeyEventArgs e);
+ public delegate void TBArrayPreviewKeyDownEventHandler(object sender, int index, PreviewKeyDownEventArgs e);
+ public delegate void TBArrayKeyPressEventHandler(object sender, int index, KeyPressEventArgs e);
+
+ public event TBArrayKeyPressEventHandler KeyPress;
+ public event TBArrayKeyDownEventHandler KeyDown;
+ public event TBArrayPreviewKeyDownEventHandler PreviewKeyDown;
+ public event TBArrayKeyDownEventHandler BeforeAutoNextFocus;
+ public event TBArrayKeyDownEventHandler AfterAutoNextFocus;
+ public event TBArrayValidatingEventHandler Validating;
+ public event TBArrayEventHandler TextChanged;
+ public event TBArrayEventHandler Enter;
+ public event TBArrayEventHandler AfterEnter;
+ public event TBArrayEventHandler Leave;
+ public event TBArrayEventHandler AfterLeave;
+ public event TBArrayEventHandler Validated;
+
+ public event TBArrayEventHandler ValueChanged; //���͍��ڕύX�������ǂ���
+ public event TBArrayResultEventHandler IsCorrectEtc; //�R���g���[���v���p�e�B�ȊO�̃`�F�b�N���s���Ƃ��ɂ��̃C�x���g���ōs���B
+ public event TBArrayKeyDownEventHandler NextFocus;
+ public event TBArrayKeyDownEventHandler KeyEnd;
+ public event TBArrayEventHandler ForceValidating;
+ public event TBArrayKeyPressEventHandler MultiKeyPress;
+
+ private List<CTextBox> items = new List<CTextBox>();
+ private string orgMstName = string.Empty;
+ private int acitveIndex = 0;
+ private Color orgBkColor = Color.White;
+ private bool isChangeLine = false;
+ private bool disbleValidating = false;
+ private bool disbleTextChanged = false;
+ private bool autoNextFocus = false;
+ private bool m_ReadOnly = false;
+
+ private bool m_ForceChangeLine = false;
+
+ /// <summary>
+ /// �}���`���͂̏ꍇ�A�uEnter�v�ʼn��s
+ /// </summary>
+ public bool ForceChangeLine
+ {
+ get { return m_ForceChangeLine; }
+ set { m_ForceChangeLine = value; }
+ }
+
+ private bool m_UsingOrgBackColor = false;
+
+ public bool UsingOrgBackColor
+ {
+ get { return m_UsingOrgBackColor; }
+ set { m_UsingOrgBackColor = value; }
+ }
+
+ /// <summary>
+ ///
+ /// </summary>
+ public bool ReadOnly
+ {
+ get { return m_ReadOnly; }
+ set
+ {
+ try
+ {
+ m_ReadOnly = value;
+ foreach (CTextBox item in items) { item.ReadOnly = m_ReadOnly; }
+ }
+ catch { }
+ }
+ }
+
+
+ /// <summary>
+ /// ���̃}�X�^���i�t�H�b�J�X�̎��j
+ /// </summary>
+ public string OrgMstName
+ {
+ get { return orgMstName; }
+ set { orgMstName = value; }
+ }
+
+ public List<CTextBox> Items
+ {
+ get { return items; }
+ }
+
+ public bool DisbleValidating
+ {
+ get { return disbleValidating; }
+ set { disbleValidating = value; }
+ }
+
+ public bool DisbleTextChanged
+ {
+ get { return disbleTextChanged; }
+ set { disbleTextChanged = value; }
+ }
+
+ /// <summary>
+ /// TAB���ʂŃt�H�[�J�X���邩�ǂ���
+ /// </summary>
+ public bool AutoNextFocus
+ {
+ get { return autoNextFocus; }
+ set { autoNextFocus = value; }
+ }
+
+ private bool m_ShiftEnterEnabled = false;
+
+ /// <summary>
+ /// ShiftEnter = KeyUp ?
+ /// </summary>
+ public bool ShiftEnterEnabled
+ {
+ get { return m_ShiftEnterEnabled; }
+ set { m_ShiftEnterEnabled = value; }
+ }
+
+
+ public CTextBoxArray()
+ : this(false, null)
+ { }
+
+ public CTextBoxArray(bool autoNextFocus)
+ : this(autoNextFocus, null)
+ { }
+
+ public CTextBoxArray(bool autoNextFocus, Control owner)
+ {
+ this.autoNextFocus = autoNextFocus;
+ if (owner != null) { InitInputSetting(owner); }
+ }
+
+ public void Add(CTextBox item)
+ {
+ Add(item, -1);
+ }
+
+ public void Add(CTextBox item, int index)
+ {
+ item.Enter += new EventHandler(this.Cell_Enter);
+ item.Leave += new EventHandler(this.Cell_Leave);
+ item.KeyPress += new KeyPressEventHandler(this.Cell_KeyPress);
+ item.KeyDown += new KeyEventHandler(Cell_KeyDown);
+ item.PreviewKeyDown += new PreviewKeyDownEventHandler(Cell_PreviewKeyDown);
+ item.TextChanged += new EventHandler(this.Cell_TextChanged);
+ item.Validating += new CancelEventHandler(this.Cell_Validating);
+ item.Validated += new EventHandler(this.Cell_Validated);
+ item.DoubleClick += new EventHandler(Cell_DoubleClick);
+ if (index >= 0)
+ {
+ items.Insert(index,item);
+ }
+ else
+ {
+ items.Add(item);
+ }
+ //enableManager.Add(new ControlEnableManager(item));
+ }
+
+ private void Cell_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
+ {
+ int index = items.IndexOf((sender as CTextBox));
+ if (PreviewKeyDown != null)
+ {
+ PreviewKeyDown(this, index, e);
+ }
+ }
+
+
+ public static void SetCtrlEnabled(Control obj,bool value)
+ {
+ try
+ {
+ if (obj is CTextBox)
+ {
+ (obj as CTextBox).Enabled = value;
+ }
+ else
+ {
+ obj.Enabled = value;
+ }
+ }
+ catch { }
+ }
+
+
+ /// <summary>
+ /// ��ʂɓ��͍��ڈȊO��CTextBox����͕s�ɂ���
+ /// </summary>
+ /// <param name="obj">�e�e��</param>
+ /// <param name="tbArray">���͊Ǘ�����</param>
+ public void SetCTextProtect(Control obj)
+ {
+ foreach (Control item in obj.Controls)
+ {
+ if (item is UserControl) { continue; }
+
+ if (item is CTextBox)
+ {
+ if (!items.Contains(item as CTextBox)) { (item as CTextBox).Enabled = false; }
+ }
+
+ SetCTextProtect(item);
+ }
+ }
+
+ public void ClearText()
+ {
+ foreach (CTextBox item in items)
+ {
+ item.Text = string.Empty;
+ if (item.MstNameCtrl != null)
+ {
+ item.MstNameCtrl.Text = string.Empty;
+ }
+ }
+ }
+
+ public void ClearTag()
+ {
+ foreach (CTextBox item in items)
+ {
+ item.Tag = null;
+ }
+ }
+
+ public void PerformValidated(object sender, EventArgs e)
+ {
+ Cell_Validated(sender, e);
+ }
+
+ public void PerformValidating(object sender, CancelEventArgs e)
+ {
+ Cell_Validating(sender, e);
+ }
+
+ public void PerformEnter(object sender, EventArgs e)
+ {
+ Cell_Enter(sender, e);
+ }
+
+ public void PerformEnter()
+ {
+ Cell_Enter(items[acitveIndex], new EventArgs());
+ }
+
+ public void PerformKeyDown(object sender, KeyEventArgs e)
+ {
+ Cell_KeyDown(sender, e);
+ }
+
+ private void SetItemValue(object sender, int index, string value)
+ {
+ (sender as CTextBox).TextChanged -= new EventHandler(Cell_TextChanged);
+ this.Items[index].Text = value;
+ (sender as CTextBox).TextChanged += new EventHandler(Cell_TextChanged);
+ }
+
+ private string GetItemValue(object sender, int index)
+ {
+ string value = string.Empty;
+ value = this.Items[index].Text;
+ return value;
+ }
+
+ private bool CheckValueChanged(object sender, int index)
+ {
+ string newInputValue = string.Empty;
+ if ((InputCtrl.GetShowStyle(this.Items[index]) & numShowStyle.ThousandSeparator) == numShowStyle.ThousandSeparator)
+ {
+ newInputValue = CConvert.ToThousandSeparator(CConvert.ToDecimal(this.Items[index].Text));
+ }
+ else
+ {
+ newInputValue = GetItemValue(sender, index);
+ }
+ if (!newInputValue.Equals(this.Items[index].OrgText))
+ {
+ //�l�ύX�������ǂ���
+ if (ValueChanged != null)
+ {
+ string saveText = GetItemValue(sender, index);
+ CTextBoxArrayBaseEventArgs vce = new CTextBoxArrayBaseEventArgs() { Cancel = false };
+ ValueChanged(this, index, vce);
+ if (vce.Cancel)
+ {
+ //���̒l�ɖ߂�
+ if (vce.ResetOrgValue) { SetItemValue(sender, index, this.Items[index].OrgText); }
+ return false;
+ }
+ SetItemValue(sender, index, saveText);
+ }
+ }
+ return true;
+ }
+
+
+ private void SetInputValue(object sender, int index)
+ {
+ if ((InputCtrl.GetShowStyle(this.Items[index]) & numShowStyle.ThousandSeparator) == numShowStyle.ThousandSeparator)
+ {
+ this.Items[index].OrgText = CConvert.ToThousandSeparator(CConvert.ToDecimal(this.Items[index].Text));
+ }
+ else
+ {
+ this.Items[index].OrgText = GetItemValue(sender, index);
+ }
+ //System.Diagnostics.Debug.WriteLine(string.Format("SetInputValue({0},{1}) orgValue = {2}", (sender as Control).Name, index, orgValue));
+ }
+
+
+ private void Cell_KeyDown(object sender, KeyEventArgs e)
+ {
+ int index = items.IndexOf((sender as CTextBox));
+ if (KeyDown != null)
+ {
+ KeyDown(this, index, e);
+ }
+ else
+ {
+ switch (e.KeyCode)
+ {
+ case Keys.Down:
+ case Keys.Return:
+ if (m_ShiftEnterEnabled && e.KeyCode == Keys.Return && e.Shift)
+ {
+ Cell_KeyDown(sender, new KeyEventArgs(Keys.Up));
+ return;
+ }
+
+ if (e.Control == true && this.Items[index].Multiline)
+ {
+ isChangeLine = true;
+ return;
+ }
+
+ isChangeLine = false;
+
+ if (!this.Items[index].EnableUpDownKey && e.KeyCode == Keys.Up) { return; }
+
+ if (!m_ReadOnly)
+ {
+ if (!CheckValueChanged(sender, index)) { return; } //�l�ύX������A�C�x���g����
+
+ if (!InputCtrl.IsCorrectText(this.Items[index]))
+ {
+ (sender as Control).Focus();
+ return;
+ }
+
+ //���̊O�`�F�b�N
+ if (IsCorrectEtc != null)
+ {
+ if (!IsCorrectEtc(this, index, new CTextBoxArrayBaseEventArgs() { CheckAll = false, ShowErrMsg = true }))
+ {
+ (sender as Control).Focus(); //�������Ȃ����́H�H
+ return;
+ }
+ }
+
+ SetInputValue(sender, index);
+ }
+ if (NextFocus != null) { NextFocus(this, index, e); }
+ if (autoNextFocus) { SetAutoNextFocus(index, e); }
+ break;
+ case Keys.Up:
+ case Keys.Escape:
+ if (m_ShiftEnterEnabled && e.KeyCode == Keys.Up && this.Items[index].Multiline && !IsTopLine(this.Items[index])) { return; }
+ if (!this.Items[index].EnableUpDownKey && e.KeyCode == Keys.Down) { return; }
+ if (NextFocus != null) { NextFocus(this, index, e); }
+ if (autoNextFocus) { SetAutoNextFocus(index, e); }
+ break;
+ case Keys.End:
+ if (m_ReadOnly) { e.Handled = true; return; }
+ if ((InputCtrl.GetShowStyle(this.Items[index]) & numShowStyle.ShowList) != numShowStyle.ShowList) { return; }
+ if (KeyEnd != null)
+ {
+ e.Handled = true;
+ KeyEnd(this, index, e);
+ }
+ break;
+ }
+ }
+ }
+
+ private bool IsTopLine(CTextBox obj)
+ {
+ try
+ {
+ if (obj.SelectionStart == 0) { return true; }
+
+ string line = obj.Text.Substring(0, obj.SelectionStart);
+ return !line.Contains(Environment.NewLine);
+ }
+ catch
+ {
+ return true;
+ }
+ }
+
+ private void Cell_Validated(object sender, EventArgs e)
+ {
+ if (m_ReadOnly) { return; }
+ int index = items.IndexOf((sender as CTextBox));
+ if (Validated != null)
+ {
+ Validated(this, index, new CTextBoxArrayBaseEventArgs());
+ }
+ }
+
+ private void Cell_DoubleClick(object sender, EventArgs e)
+ {
+ if (m_ReadOnly) { return; }
+ CTextBox curField = (sender as CTextBox);
+ int index = items.IndexOf(curField);
+ if ((InputCtrl.GetShowStyle(curField) & numShowStyle.ShowList) == numShowStyle.ShowList)
+ {
+ //�ꗗ�\��
+ if (KeyEnd != null)
+ {
+ KeyEnd(this, index, new KeyEventArgs(Keys.End));
+ }
+ }
+ }
+
+ private void Cell_Enter(object sender, EventArgs e)
+ {
+ CTextBox curField = (sender as CTextBox);
+ System.Diagnostics.Debug.WriteLine("Cell_Enter " + curField.Name);
+ orgBkColor = curField.BackColor;
+ int index = items.IndexOf(curField);
+ acitveIndex = index;
+ if (Enter != null)
+ {
+ Enter(this, index, new CTextBoxArrayBaseEventArgs());
+ }
+ else
+ {
+ this.Items[index].OrgText = curField.Text;
+ System.Diagnostics.Debug.WriteLine("Cell_Enter " + curField.Name + " Org = " + this.Items[index].OrgText);
+ InputCtrl.TextEnter(curField);
+ if (AfterEnter != null) { AfterEnter(this, index, new CTextBoxArrayBaseEventArgs()); }
+ }
+ }
+
+ private void Cell_Leave(object sender, EventArgs e)
+ {
+ CTextBox curField = (sender as CTextBox);
+ System.Diagnostics.Debug.WriteLine("Cell_Leave " + curField.Name);
+ int index = items.IndexOf((sender as CTextBox));
+ if (Leave != null)
+ {
+ Leave(this, index, new CTextBoxArrayBaseEventArgs());
+ }
+ else
+ {
+ InputCtrl.TextLeave(curField);
+ if (curField.ReadOnly || m_UsingOrgBackColor) { curField.BackColor = orgBkColor; }
+ }
+ if (AfterLeave != null) { AfterLeave(this, index, new CTextBoxArrayBaseEventArgs()); }
+ }
+
+ private void Cell_KeyPress(object sender, KeyPressEventArgs e)
+ {
+ //3 'Ctrl-C Copy 22 'Ctrl-V Paste 24 'Ctrl-X Cut //���� Redmine#8743
+ if (e.KeyChar == 3 || e.KeyChar == 22 || e.KeyChar == 24)
+ {
+ return;
+ }
+
+ CTextBox curField = (sender as CTextBox);
+ int index = items.IndexOf((sender as CTextBox));
+ if (KeyPress != null)
+ {
+ KeyPress(this, index, e);
+ }
+ else
+ {
+ if (curField.Multiline) { if (MultiKeyPress != null) { MultiKeyPress(this, index, e); } }
+ if (curField.IsChkData) { InputCtrl.TextBoxKeyPress(curField, e, curField.MaxLength, InputCtrl.GetInputType(curField)); }
+ if (!m_ForceChangeLine)
+ {
+ if (!isChangeLine && e.KeyChar == 13)
+ {
+ e.Handled = true;
+ }
+ }
+ isChangeLine = false;
+ }
+ }
+
+ private void Cell_TextChanged(object sender, EventArgs e)
+ {
+ if (m_ReadOnly) { return; }
+ if (disbleTextChanged) { return; }
+ int index = items.IndexOf((sender as CTextBox));
+ if (TextChanged != null)
+ {
+ TextChanged(this, index, new CTextBoxArrayBaseEventArgs());
+ }
+ }
+
+ private void Cell_Validating(object sender, CancelEventArgs e)
+ {
+ System.Diagnostics.Debug.WriteLine("Cell_Validating " + (sender as Control).Name);
+ if (m_ReadOnly) { return; }
+ if (this.disbleValidating) { return; }
+ int index = items.IndexOf((sender as CTextBox));
+ if (Validating != null)
+ {
+ Validating(this, index, e);
+ }
+ else
+ {
+ bool isCheck = false;
+ if (!this.Items[index].OrgText.Equals(this.Items[index].Text)) { isCheck = true; }
+
+ if (!isCheck)
+ {
+ if (ForceValidating == null)
+ {
+ return;
+ }
+ else
+ {
+ //�l�����ł��`�F�b�N�������s��
+ CTextBoxArrayBaseEventArgs forceValidatingEventArgs = new CTextBoxArrayBaseEventArgs() { Cancel = true };
+ ForceValidating(this, index, forceValidatingEventArgs);
+ if (forceValidatingEventArgs.Cancel) { return; }
+ }
+ }
+
+ bool isPass = false;
+
+ //System.Diagnostics.Debug.WriteLine("Org:" + orgValue);
+ if (!CheckValueChanged(sender, index)) { return; } //�l�ύX������A�C�x���g����
+
+ if (InputCtrl.IsCorrectText(this.Items[index], false))
+ {
+ if (IsCorrectEtc == null)
+ {
+ isPass = true;
+ }
+ else
+ {
+ if (IsCorrectEtc(this, index, new CTextBoxArrayBaseEventArgs() { CheckAll = false, ShowErrMsg = false }))
+ {
+ isPass = true;
+ }
+ }
+ }
+
+ if (isPass)
+ {
+ SetInputValue(sender, index);
+ }
+ else
+ {
+ SetItemValue(sender, index, this.Items[index].OrgText);
+ }
+ }
+ }
+
+ private bool SetAutoNextFocus(int index, KeyEventArgs e)
+ {
+ try
+ {
+ if (BeforeAutoNextFocus != null)
+ {
+ BeforeAutoNextFocus(this, index, e);
+ if (e.Handled) { return true; }
+ }
+
+ int hitIdx = -1;
+ if (e.KeyCode == Keys.Return)
+ {
+ for (int i = index + 1; i < items.Count; i++)
+ {
+ if (GeneralSub.CtrlCanFocus(items[i]))
+ {
+ hitIdx = i;
+ break;
+ }
+ }
+
+ if (hitIdx == -1) { return false; }
+ }
+ else if (e.KeyCode == Keys.Up)
+ {
+ if (index == 0) { return true; }
+
+ for (int i = index - 1; i >= 0; i--)
+ {
+ if (GeneralSub.CtrlCanFocus(items[i]))
+ {
+ hitIdx = i;
+ break;
+ }
+ }
+
+ if (hitIdx == -1) { return false; }
+ }
+ items[hitIdx].Focus();
+ e.Handled = true;
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ finally
+ {
+ if (AfterAutoNextFocus != null) { AfterAutoNextFocus(this, index, e); }
+ }
+ }
+
+ private void InitAllCtrl(Control owner)
+ {
+ foreach (Control obj in owner.Controls)
+ {
+ if ((obj is ITextBoxArray) && (obj as ITextBoxArray).TextBoxArrayMember)
+ {
+ if (obj is CTextBox) { this.Add(obj as CTextBox); }
+ }
+
+ //���̊K�w
+ if (obj.Controls.Count > 0) { InitAllCtrl(obj); }
+ }
+ }
+
+ /// <summary>
+ /// ���͐ݒ菉��������
+ /// </summary>
+ /// <param name="ownerForm"></param>
+ public void InitInputSetting(Control owner)
+ {
+ InitAllCtrl(owner);
+ items.Sort(itemsComparer);
+ }
+ }
+}
--
Gitblit v1.10.0