質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

Q&A

解決済

2回答

23659閲覧

windowsフォームのテキストボックス(金額を入力)3桁で区切りたい

yamaguti

総合スコア185

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

0グッド

0クリップ

投稿2017/05/14 02:40

お世話になります。

windowsフォームでテキスト金額を入れる部分に3桁で区切りを入れたいのですが、色々なサイト等のコードを参考にしているのですが、うまくいきません。

該当のイベントのコードを貼りますので、修正点をご教示いただけますでしょうか。
よろしくお願いします。

C#

1 private void textsikyou_Validated(object sender, EventArgs e) 2 { 3 var str = textsikyou.Text; 4 string.Format("{0:#,##0}", str); 5 textsikyou.Text = str; 6 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こういう方法もあります。フォーム名を Form1 と仮定します。

まず次のクラスを作ります。

C#

1public class Form1Data 2{ 3 public int Money { get; set; } 4}

これを一度ビルドします。
次にフォームをデザイナで表示し、該当するテキストボックスを選択します。
プロパティグリッドで「データ」カテゴリの「(DataBindings)」を展開し、「(詳細)」を選択し、「…」をクリックします。

「フォーマットと詳細バインド」ダイアログが開かれます。
「プロパティ」で「Text」を選択し、「バインド」のドロップダウンを開きます。
「プロジェクトデータソースの追加」をクリックし、「オブジェクト」を選択して「次へ」
「どのオブジェクトにバインドしますか?」で「Form1Data」にチェックを入れて「完了」
出てきた選択肢から「Money」を選択。
「形式の種類」を「カスタム」にし、「カスタム書式」に「#,##0」を入力して「OK」

Form1.Load イベントで次のように記述します。

C#

1private void Form1_Load(object sender, EventArgs e) 2{ 3 form1DataBindingSource.DataSource = new Form1Data(); 4}

以上です。

投稿2017/05/14 05:36

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2017/05/14 05:41

データバインディングという手法ですが、これを使うとユーザーインターフェース(Form1)と実際のデータ(Form1Data)が分離されるので、保守しやすくなるという利点があります。例えば Windows.Forms を WPF に変えても Form1Data はそのまま使えるので、そのデータを実際に使った演算部分には手を入れる必要がありません。
guest

0

textsikyou.Textは文字列型のプロパティなので、var strは文字列型の変数になります。
{0:#,##0}は文字列型の書式指定ではなく、数値型の書式指定です。
{0:#,##0}の書式指定を使うのであれば、引数は数値型出なくてはなりません。Int32.Parse等の型変換命令を使用して数値型に変換して与える必要があります。

Srting.Formatは文字列型を返す関数ですが、帰ってきた値を変数などに格納せずに捨ててしまっています。適当な変数に保存するなり、返値をTextプロパティに代入するなりしてください。

以上を直すと次の様なコードになります。

C#

1 private void textsikyou_Validated(object sender, EventArgs e) 2 { 3 var str = textsikyou.Text; 4 var a = string.Format("{0:#,##0}", Int32.Parse(str)); 5 textsikyou.Text = a; 6 }

実際にはコレに加えて、textsikyou.Textが数値に変換できない場合のエラー処理などを記載する必要があるでしょう。

投稿2017/05/14 03:17

Kunihiro_Narita

総合スコア472

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問