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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

3972閲覧

入力値を4桁に制限する方法を教えていただきたいです(C#)

orioriorin

総合スコア1

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/09/06 14:29

数当てゲームを作成中です

数字当てゲームをvisual stuio, C#で作成しています。
UIをまず作成してユーザーがマウスのみで入力できるようにしたいと思っています。
4桁のランダム数とユーザー入力数を4桁で統一したいと思っていますが
現在ユーザーは4桁以上の入力ができてしまっています。

プログラミング初心者ですが
どなたかご教示お願いいたします。

現在は下記のコードとボタンクリック時のコードのみです。

該当のソースコード

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Text; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace game { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string InputNum = ""; private void Form1_Load(object sender, EventArgs e) { //users cant type any input (read only) textBox1.ReadOnly = true; //textBox1.MaxLength = 4; // int MaxLength = 4; // Create random numbers and show in label for testing var random = new Random(); var num = random.Next(1000, 10000); testRandom.Text = num.ToString(); //separate/take each random number as one (test) string str = num.ToString(); char n1 = str[0]; char n2 = str[1]; char n3 = str[2]; char n4 = str[3]; label2.Text = n4.ToString(); }

試したこと

  • MaxLengthを使用したり、プロパティのMaxLengthの数値を変更してみましたが
    特に何もできませんでした
  • for も試して見ましたが演算子はintとstringで適用できませんとエラーメッセージが出てしまいました

補足情報(FW/ツールのバージョンなど)

携帯で撮った画像で申し訳ありません。

こちらの画像は実際に作成したUIです。
右上の4桁の数字はランダムでちゃんと生成されているかの確認用で
下の小さいボックス内に3とありますがそれはランダムの桁を抜き出せるかのチェック用で作成しましたので
本当は表示しません。

イメージ説明

入力値を4桁に制限する方法を教えていただきたいです

数字当てゲームをvisual stuio, C#で作成しています。
UIをまず作成してユーザーがマウスのみで入力できるようにしたいと思っています。
4桁のランダム数とユーザー入力数を4桁で統一したいと思っていますが
現在ユーザーは4桁以上の入力ができてしまっています。

プログラミング初心者ですが
どなたかご教示お願いいたします。

該当のソースコード

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Text; using System.Linq; using System.Reflection.Emit; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace game { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string InputNum = ""; private void Form1_Load(object sender, EventArgs e) { //users cant type any input (read only) textBox1.ReadOnly = true; //textBox1.Font = new Font(textBox1.Font.FontFamily, 25); //textBox1.TextAlign = ContentAlignment.MiddleCenter; //textBox1.MaxLength = 4; // int MaxLength = 4; // Create random numbers and show in label for testing var random = new Random(); var num = random.Next(1000, 10000); testRandom.Text = num.ToString(); //separate/take each random number as one string str = num.ToString(); char n1 = str[0]; char n2 = str[1]; char n3 = str[2]; char n4 = str[3]; label2.Text = n4.ToString(); } private void btn1_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "1"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn2_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "2"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn3_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "3"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn4_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "4"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn5_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "5"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn6_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "6"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn7_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "7"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn8_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "8"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn9_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "9"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btn0_Click(object sender, EventArgs e) { this.textBox1.AutoSize = true; this.textBox1.Text = "0"; this.textBox1.Font = new System.Drawing.Font("Arial", 25, FontStyle.Regular); InputNum += textBox1.Text; textBox1.Text = InputNum; } private void btnClear_Click(object sender, EventArgs e) { InputNum = ""; textBox1.ResetText(); } private void btnEnter_Click(object sender, EventArgs e) { } } }

試したこと

  • MaxLengthを使用したり、プロパティのMaxLengthの数値を変更してみましたが
    特に何もできませんでした
  • for も試して見ましたが演算子はintとstringで適用できませんとエラーメッセージが出てしまいました

補足情報(FW/ツールのバージョンなど)

携帯で撮った画像で申し訳ありません。

こちらの画像は実際に作成したUIです。
右上の4桁の数字はランダムでちゃんと生成されているかの確認用で
下の小さいボックス内に3とありますがそれはランダムの桁を抜き出せるかのチェック用で作成しましたので
本当は表示しません。

イメージ説明

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

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

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

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

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

guest

回答3

0

ベストアンサー

  • 数字ボタンを押して数字をInputNumに追加した後、InputNumの長さを調べ、4文字になっていたら、1~9の数字ボタンすべてのEnabledプロパティをfalseにする。
  • クリアボタンでInputNumを0文字に戻したときは、1~9の数字ボタンすべてのEnabledプロパティをtrueにする。
  • 答えとEnterボタンの機能が不明だが、次のゲームに移るときは、クリアボタンと同様の処理を行なう。

これで、ボタンで操作する限りは4桁の入力しかできなくなります。

投稿2020/09/06 14:50

Daregada

総合スコア11990

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

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

0

MaxLengthはテキストボックスにユーザーが直接キーボード入力やペーストされた文字列には適用されますが、プログラム内で追加した文字列には適用されません。文字列追加時にメソッドを通してMaxLengthをチェックするなりして、自分で何らかの方法で制限を行う必要があります。

簡単な例ですが、下記の例はAddTextを通すことでMaxLengthを超えないようにしています。

csharp

1 private void btn1_Click(object sender, EventArgs e) 2 { 3 AddText(btn1.Text); 4 } 5 6 public void AddText(string text) 7 { 8 int addLen = Math.Min(textBox1.MaxLength - textBox1.Text.Length, text.Length); 9 if( addLen<=0 ) 10 { 11 return; 12 } 13 14 textBox1.Text += text.Substring(0, addLen); 15 }

投稿2020/09/07 00:25

編集2020/09/07 00:51
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

orioriorin

2020/09/07 04:27

こちらのやり方もあるのですね、試してみます。ありがとうございます!
guest

0

画像からWinFormsの話だと思いますが、入力値を制限する方法は色々ありますが、ちゃんとした検証をやりたいのなら
入力のバリデーション(入力審査)
こういう記事を参考に調べてみてはどうでしょうか。
(昔はもっと良い記事もあったけど古すぎてリンク切れになってて参照できないみたい)

投稿2020/09/06 15:49

gentaro

総合スコア8949

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

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

orioriorin

2020/09/06 22:59

ありがとうございます。参考にさせていただきます!
退会済みユーザー

退会済みユーザー

2020/09/07 01:00 編集

質問者さんの添付画像とソースを見る限り、明らかにソフトウェアキーボード的な処理なので、バリデーションを紹介するのは回答のピントがずれていると思われます。
gentaro

2020/09/07 01:43

あぁ、電卓のようなものだと思って回答してましたね。 キーボード入力が一切受け付けない前提(そんな仕様する意味がわからないけど)なら、コントロールのバリデーションではなくて別の箇所で検証するべきでしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問