textBox1.Text = Test2[0] + "."             string[] Test2 = new string[0];             else    ↓ void TextBox1_KeyPress(object 決めた小数点以下の桁数かどうかを検査します。数値比較で検査 + Test3.ToString(); //四捨             {                     */                         textBox1.Text = Test2[0] + "."         {         {                 else if(keta > SetKeta)                 ; //何もしない                     else                 {             }, TextChanged でやると、Text プロパティが書き換わった後にチェックすることになります。たとえば、「12.3」と入力しておいて、「125.3」と、「5」を挿入します。99.9をオーバーするので「12.3」に Text プロパティを書き換えますが、その時にカーソルが「3」の後ろに移動します。これは使いにくい。, また、NumericUpDown コントロールで、Maximun, Minimum, DecimalPlaces を設定しても、キーボードからの入力はそれを無視してできます。そして、フォーカスがよそに移動した時に、最大値などに表示が切り替わります。さらに、アルファベットをペーストすることもできてしまう。もっとも、スピンボックスによる変更は、それぞれのプロパティの影響を受けます。キーボードからの入力は、数字とピリオド以外はじかれるので、お勧めだと思ったのだけれど。, テキストボックス (TextBox) というのは Windows Forms, WPF, ASP.NET Wen Forms 等にあって、それぞれ違うので、どれを作っているか書いてもらえないと話が始まりません。, ご返信ありがとうございます。今回直接入力が必須の仕様となってまして。。。残念ながら使えないのです。, ずいぶんと返事が遅れてしまいまして大変申し訳ありません。1つの手段として成立していることを確認出来ました。大変ありがとうございました。1度テキストボックス内の値を消去かつ小数点の2回打ちはなしという条件が必要のようです。何だかまじめに考えると難しそうですね。これを参考にいろいろ試してみたいと思います。まだまだ初心者なので手数が必要のようです。, 直接入力という要求から、NumericUpDown コントロールが使えないになる理由がわからない。, 1度テキストボックス内の値を消去かつ小数点の2回打ちはなしという条件が必要のようです。, https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/user-input-validation-in-windows-forms, 入力のタイミングで検査するのではなく、フォーカスが離れる時に検査する Validating イベントを使用する. タイトルのとおりですが、TextBoxの数字の表示は千単位でカンマしたいです例「1,000,000」よろしくお願いします答えを表示するためのテキストボックス、値を入力するためのテキストボックスなどがあり、入力操作中も随時書式を適用したい void Test_Load(object             string Test3 = "";                     } テキストボックスへの入力を整数部、小数部とそれぞれ桁数の制限をかけたいです。 (結果として0.1~99.9 までの範囲など)整数とドットとバックスペースのみなどの制限をかけて入力後に評価して丸めるなどの方法でいろいろやっていますが上手く行きません。

ExcelのVBAアプリケーションでフォームから数字を入力する場面がありますが、用意したテキストボックスに数字以外を入力されると以降のプログラム中でエラーが出る場合が多いと思います。 { がんばれ! { もし、ユーザーに入力してもう文字数に制限があった場合、入力された文字列が何か・・・より先に、そもそも文字数が制限の範囲内なのかを調べなければなりません。たとえば下図のようにパスワードを入力してもらうUserFormだったとき、入力すべきパスワードが最大で4文字だとしたら、5文字以上は入力させないようにしておけば、とりあえず文字数の問題は解決ですね。, テキストボックス内の文字列が変更されると、TextBoxのChangeイベントが発生します。ここにコードを書いておけば、入力された文字数をリアルタイムでチェックできます。, これを利用して「入力された文字数が4を越えたかどうか」を判定してみましょう。注意すべきは、Changeイベントが発生するタイミングです。Changeイベントは入力が完了した後に発生します。つまり、入力されたのが5文字だったとき、5文字目が入力されてからマクロが実行されることになります。つまり、4文字までしか入力させないようにしても、一時的には5文字目が入力されていることになります。, 4文字しか「入力させない」のだとしたら、一時的に入力されてしまった5文字目だけを消さなければなりません。これは、発想を変えればいいです。5文字目を消すのではなく、先頭から4文字目だけを有効にすればいいんです。つまり, ・5文字目が入力される となります。, これで、テキストボックスには4文字しか入力できなくなりました。だけど、実はもっと簡単な方法があるんです。TextBoxのMaxLengthプロパティは、そのテキストボックスに入力できる最大文字数を設定できます。まさに、今回のテーマにぴったりのプロパティです。, このように設定しておけば、テキストボックスには4文字しか入力できなくなります。文字数の制限をしないときは、MaxLengthプロパティに0を指定します。, なお、本コンテンツで紹介したLeft関数や、MaxLegthプロパティは、いずれも全角と半角を区別しません。テキストボックス内の全角と半角を区別する方法は、下記のページを参考にしてください。, . でも、わんくま同盟の方達が、サンプルコードを回答で書いて、それが、凡長でどうしようもない物だったら、質問者は、どう思いますか? .ドット以下の文字列を全て取得します。. 第二分岐終了                 if (System.Text.RegularExpressions.Regex.IsMatch(textBox1.Text,"^\\d*\\.\\d{1}$")) e.Handled = true;                     if (UpDat >= 5) //5以上の場合 四捨五入処理 たたき台にします。 少なくとも私には、上で書かれたような入力条件がよくわかりませんでした。, textBox1をダブルクリックすると、以下のコードが自動生成されます。                     Test3 = Test2[1].Substring(0, SetKeta);             int keta = 0; //小数点以下の総桁             if (char.IsNumber(e.KeyChar) || e.KeyChar == '.')

・Changeイベントで「5文字入力された」ことを感知             } 第一分岐                     { '); //.         }, と言う関数になります。マウスでテキストボックスをダブルクリックしても反応がない場合があります。この場合は、プロパティーウィンドの稲妻マークのボタンをクリックして下さい。表示されたイベント処理の中から、TextChangedと書いてある項目を探して、またもや、同じく、マウスでダブルクリックして下さい。ここでダブルクリックすれば、たいていは、TextChanged関数のスケルトンが自動で書き込まれます。, private void textBox1_TextChanged(object sender, EventArgs e) (ドット)で分割するのも良い。分割するには、Split関数を使う。 sender, EventArgs e), private                     UpDat = int.Parse(Test2[1].Substring(SetKeta, 1)); + Test3.ToString(); //切り捨ての場合                 {    ↓                     { Visyal Studio Community 2017 version15.7.2 を使用しております。, テキストボックスへの入力を整数部、小数部とそれぞれ桁数の制限をかけたいです。(結果として0.1~99.9 までの範囲など)整数とドットとバックスペースのみなどの制限をかけて入力後に評価して丸めるなどの方法でいろいろやっていますが上手く行きません。プロパティの設定などで出来るものなのでしょうか?, 本件いろいろな方々にご意見頂きまして大変ありがとうございました。業務の優先順位などでなかなか手が付けられず返信なども遅くなって申し訳ありませんでした。, 結果今回は数値を入力して確定ボタンを押したときに単純に値を評価してメッセージでガードすることで落ち着きました。頂いたご意見は今後の参考に致します。いろいろとありがとうございました, TextBoxの代わりにNumericUpDownを使うのはどうでしょうか? Maximum/Minimumで最大・最小値を、DecimalPlacesで小数部の桁数を設定できます。, 小生の経験からすると、プロパティーの設定で工夫することは無理じゃないかと思います。取り組んでおられる環境がWPFか従来のWinFormかで実装が違いますが、以下、小生も似たような制御をプログラムした際に使った共通する基本的な考え方です。, ○個々のキーストロークを拾うイベントを利用します。WinFormsならKeyDownイベントとかKeyPressイベントとかです。, ○イベント発生時にそれまでに入力済みの内容に対して押されたキーが受け入れられるか拒否すべきか判断します。この判断に「整数部はN桁、小数点以下はN桁」というようなルールを適用します。小数点が含まれているのにまた小数点が押されたか? 含まれていないところに小数点が押されたか? 新たな数値キーの押し下げで小数点の前の桁数が制限におさまるのか、小数点の後の桁数が制限におさまるのか、等を判定します。, ○KeyEventArgsとかKeyPressEventArgsのHandledプロパティーで受け入れか拒否か設定します。, ただですねぇ・・・、 質問者さんの説明によれば、キーボード操作だけができれば良いようなので、マウス操作は殺すことになるのかもしれません。, いやいや、そんなことはできないとなると、TextChangedでも可否を点検するとかなってきて、「同じルールを適用する操作可否判定と反応を複数の局面(イベント)でプログラムしないといけない」という事態になってきます。しかも、ルールに合わない操作ができないようにするのではなく、ルールに合わない入力になったと警告するだけです。, だったらもう、「最終局面」つまり「ここで最低限必ず操作可否を判定しないといけない局面」を決めて、そこでルールに合ってなければ再入力を求めるプログラムだけにすれば良いんじゃないかと。(小生も経験してまして、先の投稿で言いたかったことです。), Char.IsNumberも正規表現の\dも、全角数字を受け入れますね。全角ピリオドやCtrl-X、Ctrl+Vは弾かれて機能しませんね。Shift-Insertは機能しました。, 今のPCで、マウス操作無視する事はできない、、じゃないかと思います。 他からのデータを手入力したくないって方も多いし、、。 /* Unit3 */ テキストボックスは以下の条件で制限 ・テキストボックスのプロパティIME Modeを3-オフ固定 ・テキストボックスには4字までの入力 ・「.(小数点)」を入力 ・BackSpaceキーも有効 文字数の制限、0~9の半角数字入力、バックスペースの使用、できたのですが、 小数点(vbkeyDecimal)が入力できませ …

            //小数点第一位までの処理 Test変数の中の文字列を検査します。 date = new Date();

google_ad_width = 728; google_ad_client = "pub-8092962482169671";

        { google_ad_height = 90;                 //"^\\d*\\.\\d{2}$" →小数点第二位の場合             if (Test.Contains(".")) 決めた桁数以下の場合は、何もしない

(どっと)があるかを検査します。Contains関数を使用する。 }                 } 下記のコードを試すことができます。, private MSDNフォーラムにご投稿くださいましてありがとうございます。                 keta = Test2[1].Length;                 Test2 = Test.Split('.                         UpDat++;

            分割した左辺と、.                         UpDat = int.Parse(Test3);                     /* 四捨五入の場合は、上の二行は、コメントアウトして、こちらをコメント指定の(//)を消してアクティブにして下さい。変数二個も、アクティブにして下さい。 桁数を調べます。(桁数は、文字数です。) Length関数を使用する。                     textBox1.Text = Test2[0] + "."

                if (keta <= SetKeta) ここに、プログラムを書きます。

        }, 意地悪しているわけじゃないんですけど、全部、プログラムコードを教えると、次から次へと、結局、全部教えている方が書いていると言う状態になるのと、うのみにして動いていないコードを動いていると勘違いして実装すると言う事もあるので、努力する事が重要だと考えているのです。マイクロソフトさんは、商売だと言う事を重々承知しております。, MSの方が、一行で書けるプログラムを紹介していましたので、凄いと思い、これ以上書かなくて良いと思った次第です。.