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/Component/CTextBox.cs |  886 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 886 insertions(+), 0 deletions(-)

diff --git a/HotelPms.Share.Windows/Component/CTextBox.cs b/HotelPms.Share.Windows/Component/CTextBox.cs
new file mode 100644
index 0000000..325f34e
--- /dev/null
+++ b/HotelPms.Share.Windows/Component/CTextBox.cs
@@ -0,0 +1,886 @@
+using System;
+using System.ComponentModel;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Text;
+using System.Windows.Forms;
+using System.Drawing;
+using System.Drawing.Design;
+using HotelPms.Share.Windows.Component.PropertyEditor;
+using System.Runtime.InteropServices;
+using System.Text.RegularExpressions;
+
+namespace HotelPms.Share.Windows.Component
+{
+    /// <summary>
+    /// 入力スタイル
+    /// </summary>
+    public enum InputStyleSelection
+    {
+        /// <summary>
+        /// 通常
+        /// </summary>
+        [Description("通常")]
+        Normal = 0,
+        /// 時刻
+        /// </summary>
+        [Description("時刻")]
+        Time,
+        [Description("日付")]
+        Date,
+        [Description("年月")]
+        Month,
+    }
+
+    /// <summary>
+    /// MMyyを入力したときの年の付与方法
+    /// </summary>
+    public enum MMddInputStyle
+    {
+        Future = 0,  //未来
+        Before = 1,  //過去
+    }
+
+    /// <summary>
+    /// EnabledがFalseでも前景色、背景色が変わらないTextBox
+    /// </summary>
+    [ToolboxBitmap(typeof(System.Windows.Forms.TextBox))]
+    public class CTextBox : TextBox, ITextBoxArray, IPanelEx
+    {
+        public enum ETitleStyle : int
+        {
+            /// <summary>
+            /// なし
+            /// </summary>
+            [Description("なし")]
+            None = 0,
+            /// <summary>
+            /// "ラベル
+            /// </summary>
+            [Description("ラベル")]
+            Label,
+            /// <summary>
+            /// アイコン
+            /// </summary>
+            [Description("アイコン")]
+            Icon,
+            /// <summary>
+            /// アンドロイドスタイル
+            /// </summary>
+            [Description("アンドロイドスタイル")]
+            Material,
+        }
+
+        #region -------- API  ------
+
+        [EditorBrowsable(EditorBrowsableState.Always), Browsable(true),
+         DesignerSerializationVisibility(DesignerSerializationVisibility.Visible), Bindable(true)]
+        public override bool AutoSize
+        {
+            get { return base.AutoSize; }
+            set { base.AutoSize = value; }
+        }
+
+        [System.Runtime.InteropServices.DllImport("user32.dll")]
+        private static extern int SetWindowLong(IntPtr hWnd, int nIndex, int wndproc);
+        [System.Runtime.InteropServices.DllImport("user32.dll")]
+        private static extern int GetWindowLong(IntPtr hWnd, int nIndex);
+        private const int GWL_STYLE = -16;
+        private const int WS_DISABLED = 0x8000000;
+
+        private const int EM_SETCUEBANNER = 0x1501;
+        [DllImport("user32.dll", CharSet = CharSet.Auto)]
+        private static extern Int32 SendMessage(IntPtr hWnd, int msg, int wParam, [MarshalAs(UnmanagedType.LPWStr)] string lParam);
+
+        #endregion
+
+        private bool m_IsFocus = false;
+
+        private static bool m_ClickSelAll = false;
+
+        /// <summary>
+        /// クリックしたら、全選択かどうか
+        /// </summary>
+        public static bool ClickSelAll
+        {
+            get { return m_ClickSelAll; }
+            set { m_ClickSelAll = value; }
+        }
+
+        #region 拡張動作
+
+        private MMddInputStyle curMMddInputStyle = MMddInputStyle.Future;
+
+        /// <summary>
+        /// MMddで入力したら、来年 + mmddかもしくは 今年 + mmddの設定
+        /// </summary>
+        [Description("MMddで入力したら、来年/今年/ホテルデート + MMddの設定"), Category("拡張動作")]
+        public MMddInputStyle CurMMddInputStyle
+        {
+            get { return curMMddInputStyle; }
+            set { curMMddInputStyle = value; }
+        }
+
+        private string tipText = string.Empty;
+
+        [Description("ヒント"), Category("拡張動作")]
+        public string TipText
+        {
+            get { return tipText; }
+            set 
+            { 
+                tipText = value;
+                SendMessage(this.Handle, EM_SETCUEBANNER, 0, value);
+                Invalidate();
+            }
+        }
+
+        private bool panelExEnabled = false;
+
+        [Description("親Panelを描くするかどうか"), Category("IPanelEx拡張動作")]
+        public bool PanelExEnabled
+        {
+            get { return panelExEnabled; }
+            set { panelExEnabled = value; Invalidate(); }
+        }
+
+
+        private ETitleStyle titleStyle = ETitleStyle.None;
+
+        [Description("タイトル表示"), Category("IPanelEx拡張動作")]
+        public ETitleStyle TitleStyle
+        {
+            get { return titleStyle; }
+            set { titleStyle = value; Invalidate(); }
+        }
+
+        private int titleWidth = 50;
+
+        [Description("タイトル幅(アイコンの場合無効、幅=高)"), Category("IPanelEx拡張動作")]
+        public int TitleWidth
+        {
+            get { return titleWidth; }
+            set { titleWidth = value; Invalidate(); }
+        }
+
+        private string titleText = string.Empty;
+
+        [Description("タイトルの文言"), Category("IPanelEx拡張動作")]
+        public string TitleText
+        {
+            get { return titleText; }
+            set { titleText = value; Invalidate(); }
+        }
+
+        private Font titleFont = new Font("MS UI Gothic", 9F);
+
+        [Description("タイトルのフォント"), Category("IPanelEx拡張動作")]
+        public Font TitleFont
+        {
+            get { return titleFont; }
+            set { titleFont = value; Invalidate(); }
+        }
+
+        private Color titleForeColor = Color.White;
+
+        [Description("タイトルの文字色"), Category("IPanelEx拡張動作")]
+        public Color TitleForeColor
+        {
+            get { return titleForeColor; }
+            set { titleForeColor = value; Invalidate(); }
+        }
+
+        private Color titleBackColor = Color.FromArgb(255, 0, 64, 64);
+
+        [Description("タイトルの背景色"), Category("IPanelEx拡張動作")]
+        public Color TitleBackColor
+        {
+            get { return titleBackColor; }
+            set { titleBackColor = value; Invalidate(); }
+        }
+
+        private Color shadowColor = Color.FromArgb(140, 123, 193, 247);  //#7bc1f7  140, 123, 193, 247 (青)  #22AC38 140, 34, 172, 56 (緑)    255,55,71,79 (濃Gray)
+
+        [Description("影色"), Category("IPanelEx拡張動作")]
+        public Color ShadowColor 
+        {
+            get { return shadowColor; }
+            set { shadowColor = value; Invalidate(); } 
+        }
+
+        private Color borderColor = Color.FromArgb(255, 122, 122, 122); //255,0,120,215 (濃青)   #7bc1f7  140, 123, 193, 247 (青)  #22AC38 255, 34, 172, 56 (緑)  255,122,122,122(Gray)
+
+        [Description("罫線色"), Category("IPanelEx拡張動作")]
+        public Color BorderColor
+        {
+            get { return borderColor; }
+            set { borderColor = value; Invalidate(); }
+        }
+
+        private Color borderFocusColor = Color.FromArgb(255, 0, 120, 215); //255,0,120,215 (濃青)   #7bc1f7  140, 123, 193, 247 (青)  #22AC38 255, 34, 172, 56 (緑)  255,122,122,122(Gray)
+
+        [Description("罫線色"), Category("IPanelEx拡張動作")]
+        public Color BorderFocusColor
+        {
+            get { return borderFocusColor; }
+            set { borderFocusColor = value; Invalidate(); }
+        }
+
+        private Image foreImage = null;
+
+        [Category("IPanelEx拡張動作"), Description("显示的前端的图片")]
+        public Image ForeImage
+        {
+            get { return foreImage; }
+            set
+            {
+                foreImage = value;
+                Invalidate();
+            }
+        }
+
+        #endregion
+
+        private bool enabled = true;
+        public new bool Enabled
+        {
+            get { return enabled; }
+            set
+            {
+                enabled = value;
+                if (enabled)
+                {
+                    SetWindowLong(this.Handle, GWL_STYLE, (~WS_DISABLED) & GetWindowLong(this.Handle, GWL_STYLE));
+                }
+                else
+                {
+                    SetWindowLong(this.Handle, GWL_STYLE, WS_DISABLED | GetWindowLong(this.Handle, GWL_STYLE));
+                }
+            }
+        }
+
+        #region CTextBoxArray動作
+
+        private InputStyleSelection m_InputStyle = InputStyleSelection.Normal;
+        private bool m_TextBoxArrayMember = false;
+        private string m_ShowStyle = "0x1";
+        private bool m_IsChkData = false;
+        private bool m_NotNull = false;
+        private string m_InputType = "0x1";
+        private bool m_IsDate = false;
+        private string m_In_Range = string.Empty;  // '範囲: "'A','E','F'" OR "'1','2','21'" OR "[1,10]" OR "(1,10)" OR "[1,10)" OR "(1,10]"  空白の時しない
+        private string m_DBFieldName = string.Empty;
+        private object m_DBObject = null;
+        private bool m_IsPrimaryKey = false;
+        private bool m_EnableUpDownKey = false;  //↑と↓キーで「enter」と「esc」同じ様にする
+        private Control m_MstNameCtrl = null;
+
+        [Description("入力モード"), Category("CTextBoxArray動作"), DefaultValue(InputStyleSelection.Normal)]
+        public InputStyleSelection InputStyle
+        {
+            get { return m_InputStyle; }
+            set { m_InputStyle = value; }
+        }
+
+        [Description("日付コントロールかどうか"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool IsDate
+        {
+            get { return m_IsDate; }
+            set { m_IsDate = value; }
+        }
+
+        [Description("入力範囲を取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue("")]
+        public string In_Range
+        {
+            get { return m_In_Range; }
+            set { m_In_Range = value; }
+        }
+
+        [Description("DB項目名を取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue("")]
+        public string DBFieldName
+        {
+            get { return m_DBFieldName; }
+            set { m_DBFieldName = value; }
+        }
+
+        [Description("DBクラスを取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue(null)]
+        public object DBObject
+        {
+            get { return m_DBObject; }
+            set { m_DBObject = value; }
+        }
+
+        [Description("PrimaryKeyを取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool IsPrimaryKey
+        {
+            get { return m_IsPrimaryKey; }
+            set { m_IsPrimaryKey = value; }
+        }
+
+        [Description("UpとDownFocus動作するかどうか。"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool EnableUpDownKey
+        {
+            get { return m_EnableUpDownKey; }
+            set { m_EnableUpDownKey = value; }
+        }
+
+        [Description("名称コントロールを取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue("")]
+        public Control MstNameCtrl
+        {
+            get { return m_MstNameCtrl; }
+            set { m_MstNameCtrl = value; }
+        }
+
+        [Description("CTextBoxArrayの子コントロールを取得または設定します。"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool TextBoxArrayMember
+        {
+            get { return m_TextBoxArrayMember; }
+            set { m_TextBoxArrayMember = value; }
+        }
+
+        [Description("チェックするかどうか"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool IsChkData
+        {
+            get { return m_IsChkData; }
+            set { m_IsChkData = value; }
+        }
+
+        [Description("空白可能かどうか true:NULL不可 / false:NULL可"), Category("CTextBoxArray動作"), DefaultValue(false)]
+        public bool NotNull
+        {
+            get { return m_NotNull; }
+            set { m_NotNull = value; }
+        }
+
+        [Description("組合せ可能 例:0x2,0x8"), Category("CTextBoxArray動作"), DefaultValue(false),
+        Editor(typeof(InputTypeEditor), typeof(UITypeEditor))]
+        public string InputType
+        {
+            get { return m_InputType; }
+            set { m_InputType = value; }
+        }
+
+        [Description(@"組合せ可能 例:0x2,0x8
+0x1:特になし
+0x2:桁数未満だったら「0」を頭に追加
+0x4:金額時の3桁ごとの「,」 例1,000,000
+0x8:ENDキーで一覧選択画面があり"), Category("CTextBoxArray動作"), DefaultValue("0x1")]
+        public string ShowStyle
+        {
+            get { return m_ShowStyle; }
+            set { m_ShowStyle = value; }
+        }
+
+        private string m_OrgText = string.Empty;
+        public string OrgText
+        {
+            get { return m_OrgText; }
+            set { m_OrgText = value; }
+        }
+
+        #endregion
+
+        protected override void OnEnter(EventArgs e)
+        {
+            if (enabled) { base.OnEnter(e); }
+            m_IsFocus = true;
+        }
+
+        /// <summary>
+        /// フォッカス取得時
+        /// </summary>
+        /// <param name="e"></param>
+        protected override void OnGotFocus(EventArgs e)
+        {
+            if (!enabled) { return; }
+            base.OnGotFocus(e);
+
+            if ((this.Text != string.Empty) && (!this.Multiline))
+            {
+                this.SelectAll();
+            }
+        }
+
+        protected override void OnLeave(EventArgs e)
+        {
+            if (enabled) { base.OnLeave(e); }
+            m_IsFocus = false;
+        }
+
+        protected override void OnClick(EventArgs e)
+        {
+            if (enabled) { base.OnClick(e); }
+        }
+
+        protected override void OnMouseDown(MouseEventArgs e)
+        {
+            if (enabled) { base.OnMouseDown(e); }
+        }
+
+        protected override void OnMouseUp(MouseEventArgs e)
+        {
+            if (enabled) { base.OnMouseUp(e); }
+
+            if (m_ClickSelAll && m_IsFocus && e.Button == MouseButtons.Left)
+            {
+                if (this.Text.Length > 0)
+                {
+                    this.SelectAll();
+                }
+                m_IsFocus = false;
+            }
+        }
+
+        protected override void OnMouseEnter(EventArgs e)
+        {
+            if (enabled) { base.OnMouseEnter(e); }
+        }
+
+        protected override void OnKeyDown(KeyEventArgs e)
+        {
+            switch (e.KeyCode)
+            { 
+                case Keys.Return:
+                    if (m_InputStyle == InputStyleSelection.Time)
+                    {
+                        this.Text = ParseTime();
+                    }
+                    else if (m_InputStyle == InputStyleSelection.Month)
+                    {
+                        this.Text = ParseMonth();
+                    }
+                    else if (m_InputStyle == InputStyleSelection.Date)
+                    {
+                        this.Text = ParseDate();
+                    }
+                    break;
+            }
+            base.OnKeyDown(e);
+        }
+
+        protected override void OnValidating(CancelEventArgs e)
+        {
+            if (m_InputStyle == InputStyleSelection.Time)
+            {
+                this.Text = ParseTime();
+            }
+            else if (m_InputStyle == InputStyleSelection.Month)
+            {
+                this.Text = ParseMonth();
+            }
+            else if (m_InputStyle == InputStyleSelection.Date)
+            {
+                this.Text = ParseDate();
+            }
+            base.OnValidating(e);
+        }
+
+        /// <summary>
+        /// 月文字列加工
+        /// </summary>
+        /// <returns></returns>
+        public string ParseMonth()
+        {
+            string sbuf = "";
+            try
+            {
+                if (this.Text.Length == 2)
+                {
+                    //月のみが入力されている場合は、当年の年を付加する
+                    if (int.Parse(this.Text) >= 1 && int.Parse(this.Text) <= 12)
+                    {
+                        sbuf = DateTime.Today.Year.ToString() + "/" + this.Text;
+                    }
+                }
+                else if (this.Text.Length == 6)
+                {
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == -1)
+                    {
+                        if (int.Parse(this.Text.Substring(4)) >= 1 && int.Parse(this.Text.Substring(4)) <= 12)
+                        {
+                            sbuf = this.Text.Substring(0, 4) + "/" + this.Text.Substring(4);
+                        }
+                    }
+                    else if (pos == 4)
+                    {
+                        sbuf = this.Text.Substring(0, 4) + "/0" + this.Text.Substring(5);
+                    }
+                }
+                else if (this.Text.Length == 7 && this.Text.LastIndexOf('/') == 4)
+                {
+                    if (int.Parse(this.Text.Substring(5)) >= 1 && int.Parse(this.Text.Substring(5)) <= 12)
+                    {
+                        sbuf = this.Text;
+                    }
+                }
+
+                if (Convert.ToInt32(sbuf.Replace("/", string.Empty)) < 190101) { return string.Empty; }
+
+                return sbuf;
+            }
+            catch
+            {
+                return "";
+            }
+
+        }
+
+        /// <summary>
+        /// 全て数字かどうか
+        /// </summary>
+        /// <param name="strNumber"></param>
+        /// <returns></returns>
+        private bool IsWholeNumber(String strNumber)
+        {
+            Regex objNotPattern = new Regex("[^0-9]");
+            Regex objPattern = new Regex("^[0-9]+$");
+            return !objNotPattern.IsMatch(strNumber) && objPattern.IsMatch(strNumber);
+        }
+
+        private DateTime GetToday()
+        {
+            return DateTime.Today;
+        }
+
+        public string ParseDate()
+        {
+            string sbuf = "";
+            try
+            {
+                if (this.Text.Length == 10)
+                {
+                    //入力された文字列が日付入力文字として正しいかをチェックする
+
+                    int pos = this.Text.IndexOf('/');
+                    if (pos == 4)
+                    {
+                        pos = this.Text.LastIndexOf('/');
+                        if (pos == 7)
+                        {
+                            if (int.Parse(this.Text.Substring(5, 2)) >= 1 && int.Parse(this.Text.Substring(5, 2)) <= 12 && int.Parse(this.Text.Substring(8)) >= 1 && int.Parse(this.Text.Substring(8)) <= 31)
+                            {
+                                DateTime result;
+                                if (DateTime.TryParse(this.Text, out result))
+                                {
+                                    sbuf = this.Text;
+                                }
+                            }
+                        }
+                    }
+                }
+                else if (this.Text.Length == 9)
+                {
+                    int pos = this.Text.IndexOf('/');
+                    if (pos == 4)
+                    {
+                        pos = this.Text.LastIndexOf('/');
+                        if (pos == 7)
+                        {
+                            // Ex)2012/10/1
+                            if (int.Parse(this.Text.Substring(5, 2)) >= 1 && int.Parse(this.Text.Substring(5, 2)) <= 12 && int.Parse(this.Text.Substring(8)) >= 1 && int.Parse(this.Text.Substring(8)) <= 31)
+                            {
+                                DateTime result;
+                                if (DateTime.TryParse(this.Text.Substring(0, 7) + "/0" + this.Text.Substring(8), out result))
+                                {
+                                    sbuf = this.Text.Substring(0, 7) + "/0" + this.Text.Substring(8);
+                                }
+                            }
+                        }
+                        else if (pos == 6)
+                        {
+                            //20151218 毛利 Redmine#7195 日付のチェックの桁がおかしかった。.Substring(8)→.Substring(7)に修正
+                            // Ex)2012/1/11
+                            if (int.Parse(this.Text.Substring(5, 1)) >= 1 && int.Parse(this.Text.Substring(5, 1)) <= 12 && int.Parse(this.Text.Substring(7)) >= 1 && int.Parse(this.Text.Substring(7)) <= 31)
+                            {
+                                DateTime result;
+                                if (DateTime.TryParse(this.Text.Substring(0, 5) + "0" + this.Text.Substring(5), out result))
+                                {
+                                    sbuf = this.Text.Substring(0, 5) + "0" + this.Text.Substring(5);
+                                }
+                            }
+                        }
+                    }
+                }
+                else if (this.Text.Length == 8)
+                {
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == -1)
+                    {
+                        //スラッシュが入力されない場合
+                        if (int.Parse(this.Text.Substring(4, 2)) >= 1 && int.Parse(this.Text.Substring(4, 2)) <= 12 && (int.Parse(this.Text.Substring(6, 2)) >= 1 && int.Parse(this.Text.Substring(6, 2)) <= 31))
+                        {
+                            DateTime result;
+                            if (DateTime.TryParse(this.Text.Substring(0, 4) + "/" + this.Text.Substring(4, 2) + "/" + this.Text.Substring(6, 2), out result))
+                            {
+                                sbuf = this.Text.Substring(0, 4) + "/" + this.Text.Substring(4, 2) + "/" + this.Text.Substring(6, 2);
+                            }
+                        }
+                    }
+                    else if (pos == 6)
+                    {
+                        //Ex)2012/1/1
+                        pos = this.Text.IndexOf('/');
+                        if (pos == 4)
+                        {
+                            DateTime result;
+                            if (DateTime.TryParse(this.Text.Substring(0, 4) + "/0" + this.Text.Substring(5, 1) + "/0" + this.Text.Substring(7), out result))
+                            {
+                                sbuf = this.Text.Substring(0, 4) + "/0" + this.Text.Substring(5, 1) + "/0" + this.Text.Substring(7);
+                            }
+                        }
+                    }
+                }
+                else if (this.Text.Length == 6)
+                {
+                    if (IsWholeNumber(this.Text))
+                    {
+                        DateTime result;
+                        string dateStr = string.Format("{0}{1}/{2}/{3}", DateTime.Today.Year.ToString().Substring(0, 2), this.Text.Substring(0, 2), this.Text.Substring(2, 2), this.Text.Substring(4, 2));
+                        if (DateTime.TryParse(dateStr, out result))
+                        {
+                            sbuf = dateStr;
+                        }
+                    }
+                }
+                else if (this.Text.Length == 5)
+                {
+                    //月日のみ入力
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == 2)
+                    {
+                        DateTime result;
+                        if (DateTime.TryParse(DateTime.Today.Year.ToString() + "/" + this.Text, out result))
+                        {
+                            sbuf = DateTime.Today.Year.ToString() + "/" + this.Text;
+                        }
+                    }
+                }
+                else if (this.Text.Length == 4)
+                {
+                    //月日のみ入力 Ex)1111
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == -1)
+                    {
+                        DateTime result;
+
+                        if (this.Text == "0229")
+                        {
+                            if (!DateTime.TryParse(this.GetToday().Year.ToString() + "/02/29", out result))//今年で変換できた
+                            {
+                                if (curMMddInputStyle == MMddInputStyle.Future)//「今年/02/29」 or 「来年/02/29」
+                                {
+                                    DateTime.TryParse(this.GetToday().Year.ToString() + "/02/28", out result);//仮に0228で日付取得
+                                }
+                                else if (curMMddInputStyle == MMddInputStyle.Before)
+                                {
+                                    DateTime.TryParse(this.GetToday().Year.ToString() + "/03/01", out result);//仮に0301で日付取得
+                                }
+                            }
+
+                            if (curMMddInputStyle == MMddInputStyle.Future)//「今年/02/29」 or 「来年/02/29」
+                            {
+                                //未来
+                                if (DateTime.Compare(result.Date, this.GetToday().Date) < 0)
+                                {
+                                    result = result.AddYears(1);//さらに未来
+                                }
+                            }
+                            else if (curMMddInputStyle == MMddInputStyle.Before)//「今年/02/29」 or 「去年/02/29」
+                            {
+                                //過去
+                                if (DateTime.Compare(result.Date, this.GetToday().Date) > 0)
+                                {
+                                    result = result.AddYears(-1);//さらに過去
+                                }
+                            }
+
+                            if (DateTime.TryParse(result.Year.ToString() + "/02/29", out result))//最後にその年で02/29にがあるなら
+                            {
+                                sbuf = result.ToString("yyyy/MM/dd");
+                            }
+                        }
+                        else if (DateTime.TryParse(this.GetToday().Year.ToString() + "/" + this.Text.Substring(0, 2) + "/" + this.Text.Substring(2), out result))
+                        {
+                            if (curMMddInputStyle == MMddInputStyle.Future)
+                            {
+                                //未来
+                                if (DateTime.Compare(new DateTime(this.GetToday().Year, int.Parse(this.Text.Substring(0, 2)), int.Parse(this.Text.Substring(2))), this.GetToday().Date) < 0)
+                                {
+                                    sbuf = (this.GetToday().Year + 1).ToString() + "/" + this.Text.Substring(0, 2) + "/" + this.Text.Substring(2);
+                                }
+                                else
+                                {
+                                    sbuf = this.GetToday().Year.ToString() + "/" + this.Text.Substring(0, 2) + "/" + this.Text.Substring(2);
+                                }
+                            }
+                            else
+                            {
+                                //過去
+                                if (DateTime.Compare(new DateTime(this.GetToday().Year, int.Parse(this.Text.Substring(0, 2)), int.Parse(this.Text.Substring(2))), this.GetToday().Date) <= 0)
+                                {
+                                    sbuf = this.GetToday().Year.ToString() + "/" + this.Text.Substring(0, 2) + "/" + this.Text.Substring(2);
+                                }
+                                else
+                                {
+                                    sbuf = (this.GetToday().Year - 1).ToString() + "/" + this.Text.Substring(0, 2) + "/" + this.Text.Substring(2);
+                                }
+                                //-----------------------------------liu 不具合2270 ↑-------------------------------------------------------
+                            }
+                        }
+                    }
+                    else if (pos == 1)
+                    {
+                        //月日のみ入力 Ex)1/11
+                        DateTime result;
+                        if (DateTime.TryParse(DateTime.Today.Year.ToString() + "/0" + this.Text, out result))
+                        {
+                            sbuf = DateTime.Today.Year.ToString() + "/0" + this.Text;
+                        }
+                    }
+                    else if (pos == 2)
+                    {
+                        //月日のみ入力 Ex)11/1
+                        DateTime result;
+                        if (DateTime.TryParse(DateTime.Today.Year.ToString() + "/" + this.Text.Substring(0, 2) + "/0" + this.Text.Substring(3), out result))
+                        {
+                            sbuf = DateTime.Today.Year.ToString() + "/" + this.Text.Substring(0, 2) + "/0" + this.Text.Substring(3);
+                        }
+                    }
+                }
+                else if (this.Text.Length == 3)
+                {
+                    //月日のみ入力 Ex)111
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == 1)
+                    {
+                        //月日のみ入力 Ex)1/1
+                        DateTime result;
+                        if (DateTime.TryParse(DateTime.Today.Year.ToString() + "/0" + this.Text, out result))
+                        {
+                            sbuf = result.ToShortDateString();
+                        }
+                    }
+                }
+                else if (this.Text.Length == 2)
+                {
+                    //EX 01
+                    int pos = this.Text.LastIndexOf('/');
+                    if (pos == -1)
+                    {
+                        DateTime result;
+                        if (DateTime.TryParse(this.GetToday().Year.ToString() + "/" + this.GetToday().Month.ToString() + "/" + this.Text, out result))
+                        {
+                            if (DateTime.Compare(this.GetToday().Date, new DateTime(this.GetToday().Year, this.GetToday().Month, int.Parse(this.Text))) <= 0)
+                            {
+                                sbuf = this.GetToday().Year.ToString() + "/" + this.GetToday().Month.ToString() + "/" + this.Text;
+                            }
+                            else
+                            {
+                                if ((this.GetToday().Month + 1) > 12)
+                                {
+                                    sbuf = (this.GetToday().Year + 1).ToString() + "/01" + "/" + this.Text;
+                                }
+                                else
+                                {
+                                    sbuf = this.GetToday().Year.ToString() + "/" + (this.GetToday().Month + 1).ToString() + "/" + this.Text;
+                                }
+                            }
+                            sbuf = DateTime.Parse(sbuf).ToString("yyyy/MM/dd");
+                        }
+                    }
+                }
+                return sbuf;
+            }
+            catch
+            {
+                //return this.Text;
+                return OrgText;
+            }
+
+        }
+
+        /// <summary>
+        /// 時間文字列の加工
+        /// </summary>
+        /// <returns></returns>
+        public string ParseTime()
+        {
+            // 00:00 ~ 23:59
+            string sbuf = "";
+            try
+            {
+                if (this.Text.Length > 5) { return string.Empty; }
+                int pos = this.Text.LastIndexOf(':');
+                if (this.Text.Length == 5)
+                {
+                    if (pos == 2)
+                    {
+                        if (int.Parse(this.Text.Substring(0, 2)) >= 0 && int.Parse(this.Text.Substring(0, 2)) < 24 && int.Parse(this.Text.Substring(3)) >= 0 && int.Parse(this.Text.Substring(3)) <= 59)
+                        {
+                            sbuf = this.Text;
+                        }
+                    }
+                }
+                else if (this.Text.Length == 4)
+                {
+                    if (pos >= 0)
+                    {
+                        string[] items = this.Text.Split(new char[] { ':' });
+                        if (int.Parse(items[0]) >= 0 && int.Parse(items[0]) < 24 && int.Parse(items[1]) >= 0 && int.Parse(items[1]) <= 59)
+                        {
+                            sbuf = int.Parse(items[0]).ToString().PadLeft(2, '0') + ":" + int.Parse(items[1]).ToString().PadLeft(2, '0');
+                        }
+                    }
+                    else
+                    {
+                        if (int.Parse(this.Text.Substring(0, 2)) >= 0 && int.Parse(this.Text.Substring(0, 2)) < 24 && int.Parse(this.Text.Substring(2)) >= 0 && int.Parse(this.Text.Substring(2)) <= 59)
+                        {
+                            sbuf = this.Text.Substring(0, 2) + ":" + this.Text.Substring(2);
+                        }
+                    }
+                }
+                else
+                {
+                    if (pos >= 0)
+                    {
+                        string[] items = this.Text.Split(new char[] { ':' });
+                        if (int.Parse(items[0]) >= 0 && int.Parse(items[0]) < 24 && int.Parse(items[1]) >= 0 && int.Parse(items[1]) <= 59)
+                        {
+                            sbuf = int.Parse(items[0]).ToString().PadLeft(2, '0') + ":" + int.Parse(items[1]).ToString().PadLeft(2, '0');
+                        }
+                    }
+                    else if (this.Text.Length == 3)
+                    {
+                        if (int.Parse(this.Text.Substring(0, 1)) >= 0 && int.Parse(this.Text.Substring(0, 1)) < 24 && int.Parse(this.Text.Substring(1)) >= 0 && int.Parse(this.Text.Substring(1)) <= 59)
+                        {
+                            sbuf = this.Text.Substring(0, 1) + ":" + this.Text.Substring(1);
+                        }
+                    }
+                    else if (this.Text.Length == 2)
+                    {
+                        if (int.Parse(this.Text) >= 0 && int.Parse(this.Text) < 24)
+                        {
+                            sbuf = this.Text + ":00";
+                        }
+                    }
+                    else if (this.Text.Length == 1)
+                    {
+                        sbuf = this.Text.PadLeft(2, '0') + ":00";
+                    }
+                }
+                return sbuf;
+            }
+            catch
+            {
+                return "";
+            }
+        }
+
+        public virtual void ResetOrgText()
+        {
+            m_OrgText = this.Text;
+        }
+
+    }
+}

--
Gitblit v1.10.0