/// <summary>Equals</summary> /// <param name="edadp">EditDigitsAfterDP</param> /// <returns> /// true:等しい /// false:等しくない /// </returns> /// <remarks>全メンバの==のAND</remarks> public bool Equals(EditDigitsAfterDP edadp) { // null対応 if (edadp == null) { return(false); } return ((this.HowToCut == edadp.HowToCut) && (this.DigitsAfterDP == edadp.DigitsAfterDP)); }
/// <summary> /// ConvertTo(プロパティグリッド表示値への変換)を実行する。 /// </summary> /// <param name="context">コンテキスト</param> /// <param name="culture">カルチャと</param> /// <param name="value">EditDigitsAfterDPオブジェクト</param> /// <param name="destinationType">変換後の型</param> /// <returns>文字列</returns> public override object ConvertTo( ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { // 型をチェック if (destinationType == typeof(string)) { // 文字列へ変換 if (value is EditDigitsAfterDP) { EditDigitsAfterDP edadp = (EditDigitsAfterDP)value; return(edadp.HowToCut.ToString() + " : " + edadp.DigitsAfterDP.ToString()); } } // 上記以外の場合、ベースへ。 return(base.ConvertTo(context, culture, value, destinationType)); }
/// <summary> /// ConvertFrom(プロパティグリッドからの変換)を実行する。 /// </summary> /// <param name="context">コンテキスト</param> /// <param name="culture">カルチャ</param> /// <param name="value">文字列</param> /// <returns>EditDigitsAfterDPオブジェクト</returns> public override object ConvertFrom( ITypeDescriptorContext context, CultureInfo culture, object value) { // 文字列型の場合 if (value is string) { string[] s = value.ToString().Split(':'); EditDigitsAfterDP edadp = new EditDigitsAfterDP(); string howToCut = s[0].Trim(); if (howToCut == CutMethod.Banker.ToString()) { edadp.HowToCut = CutMethod.Banker; } else if (howToCut == CutMethod._4sya5nyu.ToString()) { edadp.HowToCut = CutMethod._4sya5nyu; } else if (howToCut == CutMethod.Ceiling.ToString()) { edadp.HowToCut = CutMethod.Floor; } else { edadp.HowToCut = CutMethod.Ceiling; } if (s.Length <= 1 || s[1].Trim() == "") { edadp.DigitsAfterDP = 0; } else { edadp.DigitsAfterDP = uint.Parse(s[1].Trim()); } return(edadp); } // 上記以外の場合、ベースへ。 return(base.ConvertFrom(context, culture, value)); }
/// <summary>Equals</summary> /// <param name="edadp">EditDigitsAfterDP</param> /// <returns> /// true:等しい /// false:等しくない /// </returns> /// <remarks>全メンバの==のAND</remarks> public bool Equals(EditDigitsAfterDP edadp) { // null対応 if (edadp == null) { return false; } return (this.HowToCut == edadp.HowToCut) && (this.DigitsAfterDP == edadp.DigitsAfterDP); }
/// <summary>小数点以下x桁の0を削除</summary> /// <param name="txt">入力文字列</param> /// <param name="edad">小数点以下切り捨て指定</param> /// <returns>編集後の文字列</returns> private string DeleteZeroAfterDP(string txt, EditDigitsAfterDP edad) { if ((edad != null && (edad.HowToCut.HasValue && edad.HowToCut.Value != CutMethod.None)) && txt != "" && StringChecker.IsHankaku(txt) && StringChecker.IsNumeric(txt)) { // 小数点以下切り捨て指定有り(の数値入力)の場合で、 // 整数部が入力されている場合。 // 余分な「0」を削る。 if (txt.IndexOf('.') == -1) { // 小数点無し。 } else { // 小数点有り。 // 後ろから0を削っていく(.も対象となる)。 int i = txt.Length - 1; if (i == -1) { // 空文字列 } else { for (; txt[i] == '0' || txt[i] == '.'; i--) { if (i <= 0) { // ・・・ break; } else { // 削る if (txt[i] == '0') { txt = txt.Substring(0, i); continue; // '0'は継続 } else if (txt[i] == '.') { txt = txt.Substring(0, i); break; // '.'で停止 } else { // ここは通らない。 } } } } } } return txt; }
/// <summary>後ろに小数点以下x桁を付与</summary> /// <param name="txt">入力文字列</param> /// <param name="edad">小数点以下切り捨て指定</param> /// <returns>編集後の文字列</returns> private string AddZeroAfterDP(string txt, EditDigitsAfterDP edad) { if ((edad != null && edad.DigitsAfterDP != 0 && (edad.HowToCut.HasValue && edad.HowToCut.Value != CutMethod.None)) && txt != "" && StringChecker.IsHankaku(txt) && StringChecker.IsNumeric(txt)) { // 小数点以下切り捨て指定有り(の数値入力)の場合で、 // 整数部が入力されている場合。 // 少数部が入力されている・いない。 int IndexOfDP = txt.IndexOf('.'); if (IndexOfDP == -1) { // DP無しの場合、 // MaxLength(最低2文字(.0)の空きが必須 if (txt.Length + 2 <= this.MaxLength) { // DP付与は可能 txt += "."; for (int i = 0; i < edad.DigitsAfterDP; i++) { // MaxLengthに達していたら、forをbreak if (this.MaxLength <= txt.Length) { break; } // 以降、桁数分0追加 txt += "0"; } } else { // DP付与も不可 } } else { // DP有りの場合、 for (int i = txt.Length - (IndexOfDP + 1); i < (int)edad.DigitsAfterDP; i++) // 条件間違っていた(修正済み)。 { // MaxLengthに達していたら、forをbreak if (this.MaxLength <= txt.Length) { break; } // 以降、桁数分0追加 txt += "0"; } } } return txt; }
/// <summary> /// ConvertFrom(プロパティグリッドからの変換)を実行する。 /// </summary> /// <param name="context">コンテキスト</param> /// <param name="culture">カルチャ</param> /// <param name="value">文字列</param> /// <returns>EditDigitsAfterDPオブジェクト</returns> public override object ConvertFrom( ITypeDescriptorContext context, CultureInfo culture, object value) { // 文字列型の場合 if (value is string) { string[] s = value.ToString().Split(':'); EditDigitsAfterDP edadp = new EditDigitsAfterDP(); string howToCut = s[0].Trim(); if (howToCut == CutMethod.Banker.ToString()) { edadp.HowToCut = CutMethod.Banker; } else if (howToCut == CutMethod._4sya5nyu.ToString()) { edadp.HowToCut = CutMethod._4sya5nyu; } else if (howToCut == CutMethod.Ceiling.ToString()) { edadp.HowToCut = CutMethod.Floor; } else { edadp.HowToCut = CutMethod.Ceiling; } if (s.Length <= 1 || s[1].Trim() == "") { edadp.DigitsAfterDP = 0; } else { edadp.DigitsAfterDP = uint.Parse(s[1].Trim()); } return edadp; } // 上記以外の場合、ベースへ。 return base.ConvertFrom(context, culture, value); }