| ■No98010 (たかし さん) に返信 > TextBoxのフォーマットを「12,345,678」にするために、
TextBox1.Text を NumericUpDown1.Value に差し替えるのは如何ですか?
NumericUpDown ならば、最初から数値しか入力できなくなりますし、 3 桁区切りも ThousandsSeparator プロパティの設定だけで済みます。 最小値・最大値・小数点桁数なども制限できますよ。
TextBox では文字列を返す Text プロパティを扱いましたが、 NumericUpDown ではそれの代わりに、数値を返す Value プロパティを使うことになります。
> TextBox.Text = CStr(Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text))
・TextBox の名前を、型名と同一の "TextBox" にするのは、混乱を招くので避けましょう。 ・Val の利用はお奨めしません。特定の文字列に対して変換エラーを起こすことがあります。
文字列の数値化が目的なら、Decimal.TryParse メソッドの利用をお奨めしておきます。
> TextBox.Text = CStr(Val(TextBox1.Text) + Val(TextBox2.Text) + Val(TextBox3.Text)) この時点で、 String → Double → String という変換が発生しています。
> If TextBox.Text = "" Then となれば、この時点で "" になることは無いはず。
> TextBox.Text = String.Format("{0:##,###,###}", CLng(TextBox.Text)) 先ほどは String → Double → String したものを、さらに String → Long → String と変換していますね。 であれば、最初にわざわざ CStr せずとも、数値型の変数に受けて処理した方が良いでしょう。
また、3 桁区切りを ##,###,### 指定にしていますが、 その場合、数値ゼロが "0" ではなく "" になります。 もしも N0 書式にすれば、ゼロを "0" と変換できます。 |