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;
|
}
|
|
}
|
}
|