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