追記 今このように処理をしていて
この関数を使うタイミングは、テキストボックスに表示させるときで
この関数にどんな動作をさせたいかは、整数の場合はそのま表示し 小数点があるときは少数第一位まで小数点を使用可能にする
この下記の処理で でバックしたところ
1.5 をテキストボックスを入力したとして
最後に5の部分が この処理 ( else {decimal_point(txtBox);} //小数点の制御) によって省かれてしまいます。
この5を通す処理をかくにはどうすればよいのでしょうか?
C#
1コード 2// 小数点制御処理 3 public void decimal_process(TextBox txtBox) 4 { 5 try 6 { 7 if (!string.IsNullOrWhiteSpace(txtBox.Text)) 8 { //○ 9 var value = txtBox.Text; 10 string[] values = value.Split('.'); //整数と小数を分割する 11 int currentPoint = 0; 12 13 if (values.Length > 0) 14 { //○ 15 16 //整数部のみで構成されている場合 17 18 //○ 19 20 //---------------------------------- 21 //整数+小数で構成されている場合 22 //---------------------------------- 23 //入力後の現カーソル位置を取得 24 25 //○ 26 currentPoint = txtBox.SelectionStart; 27 28 //今回の入力値が"."の場合、小数点を基準点として桁あふれ分を除外する 29 if (value.Substring(currentPoint - 1, 1) == ".") //○ 30 { 31 //=== 整数部の処理 === 32 var intPart = values[0]; //○ 33 if (values[0].Length > integral_digits) //○ 34 { 35 intPart = values[0].Substring(integral_digits - values[0].Length); 36 } 37 38 //=== 小数部の処理 === 39 var decimalPart = values[1]; //○ 40 if (values[1].Length > decimal_digits) //○ 41 { 42 decimalPart = values[1].Substring(0, decimal_digits); 43 } 44 //○ 45 //整数と小数を結合 46 if (values[0].Length > integral_digits || values[1].Length > decimal_digits) 47 { 48 txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart); 49 50 //小数点入力時なら小数点の後ろにカーソルをセット 51 txtBox.SelectionStart = value.IndexOf(".") + 1; 52 } 53 } 54 else //○ 55 { 56 //=== 整数部の処理 === 57 var intPart = values[0]; 58 if (values[0].Length > integral_digits) //○ 59 { 60 //カーソル位置の前の1文字が今回入力された文字、 61 //よって、それを省いた文字列に編集する 62 var left = values[0].Substring(0 63 , currentPoint > integral_digits 64 ? integral_digits : currentPoint - 1); 65 var right = left.Length >= integral_digits 66 ? "" : values[0].Substring(currentPoint); 67 68 //桁数調整後の整数部文字列 69 intPart = left + right; 70 } 71 72 //=== 小数部の処理 === 73 var decimalPart = values[1]; //○ 74 if (values[1].Length > decimal_digits) 75 { 76 //整数部と小数点を除いたときのカーソル位置を算出 77 var tempPoint = currentPoint - values[0].Length - 1; 78 //カーソル位置の前の1文字を除外する 79 var left = values[1].Substring(0 80 , tempPoint > decimal_digits 81 ? decimal_digits : tempPoint - 1); 82 var right = left.Length >= decimal_digits 83 ? "" : values[1].Substring(tempPoint); 84 85 //桁数調整後の小数部文字列 86 decimalPart = left + right; 87 } 88 89 //整数と小数を結合 90 if (values[0].Length > integral_digits || values[1].Length > decimal_digits) //○ 91 { 92 txtBox.Text = string.Format("{0}.{1}", intPart, decimalPart); 93 94 //カーソル位置を入力前の位置に戻す 95 txtBox.SelectionStart = currentPoint - 1; 96 } 97 98 //ここの処理です。 99 else 100 { 101 decimal_point(txtBox); //小数点の制御 102 } 103 104 } 105 //○ 106 head_decimal(txtBox); //先頭が小数点なら先頭に 0 を入れる 107 108 } 109 } 110 }//○ 111 catch (Exception ex) //エラー時の処理 112 { 113 Console.Error.WriteLine(ex); 114 }//○ 115 finally //最後に必ず処理する 116 { 117 txtBox.TextChanged += textWeight_TextChanged; 118 119 } 120 }
漠然とコードを上げられても何も言えません。この関数を使うタイミングとこの関数にどんな動作をさせたいかを追記してください。
現在の質問内容では要件が伝わりにくく回答が得られにくいように思います。質問テンプレートをご活用ください。https://teratail.com/help/question-tips#questionTips3-8
追記しました、
回答3件
あなたの回答
tips
プレビュー