テキストボックスの数値入力制限を解決する方法

このQ&Aのポイント
  • テキストボックスによる数値入力の制限で困っています。LEDの点灯とモーターの動作のチェックプログラムを作成しましたが、テキストボックスの数値入力がうまく制限できません。
  • 上司からの要望で、数値入力の制限を簡単にし、Back Spaceキーが使えるプログラムを探していますが、うまく見つかりません。分かりやすい説明と共に、解決策を教えてください。
  • Back Spaceキーが効かない制限付きの数値入力テキストボックスを作成したいです。効果的な方法やプログラムの書き方を教えてください。
回答を見る
  • ベストアンサー

テキストボックスの数値入力制限

テキストボックスによる数値入力の制限で困っています。 LEDの点灯とモーターの動作のチェックプログラムを作り 完成したのですが、いろいろとネットで調べ 下記のプログラムでテキストボックスの数値入力を作成したのですが、 作成プログラム Dim bKeyNum As Boolean = Char.IsDigit(e.KeyChar) If bKeyNum <> True Then e.Handled = True End If この方法ではBack Spaceキーが効かないため上司から使いづらいので キーが効くようにしてほしいと要望があり、 もう一度探しましたが、どれも記述どおりにやっても うまく動きません。 何か私に分かりやすく説明をしてくれて簡単に数値入力と Back Spaceキーが使えるプログラムを教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

BackSpaceが動いたら、今度は左右キーやDeleteキーも・・・という要求が出そうですね。 なので、下記のように 数字とコントロール文字以外は Handled = True となる式を作ればよいと思います。 Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress e.Handled = Not (Char.IsDigit(e.KeyChar) OrElse Char.IsControl(e.KeyChar)) End Sub

kou1012
質問者

お礼

ありがとうございました。 解決ができました。 これで上司に文句を言われづにすみそうです。 なるほど、Char.IsContorolというのがBack Space等の コントロールキーに対するメソッドになるわけですね。 これから行くと英文字やカタカナ、漢字等のメソッドも あるのでしょうか。

その他の回答 (1)

回答No.2

Char構造体のSharedメソッドにおけるIs***メソッドは特定の文字の種類を判別するメソッドです。これ以外の文字については、GetUnicodeCategoryで文字コードのカテゴリを取得できます。 それ以外の文字は、文字コードから判断します。 詳しくはMSDNに丸投げ。 あとついでに気づいたことを。 現状だとペーストは可能だと思います。 .NET 2.0以降であればTextboxのShortcutsEnabledをFalseにすることでショートカットによる操作とコンテキストメニュー(右クリックメニュー)を無効にします。

kou1012
質問者

お礼

ショートカットキーについてもありがとうございました。 確かにFalseにするのを忘れていました。 さっそく直しておきました。 MSDNでGetUnicodeCategoryを詳しく調べてみます。 Wizard_Zeroさん、 いろいろとご教授ありがとうございました。

関連するQ&A

  • C#で、テキストボックスの入力について。

    テキストボックスに数値しか入力させないようにし、さらにそれを3桁のコンマ区切りで表示しています。 以下の文でやっています。 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b' ) { e.Handled = true; } } private void textBox1_Leave(object sender, EventArgs e) { this.textBox1.Text = string.Format("{0:#,0}", ulong.Parse(this.textBox1.Text)); } 上の方では数値のみの入力制限、下の方では桁区切りを実行しています。 これでうまくいくのですが、エラーが一つ出ます。 一度数字を入力し、リーブしたらもう桁区切りがなされます。 しかしそれを書き換える、例えば全部消してから書き換えるのでなく、桁数が一文字多かったので消そうというときに、一つ消してリーブすると、コンマが入っているためにエラーになります。 これを防ぐにはどうすればいいでしょうか? また、ただそれだけでは、桁区切りがおかしくなるはずです。 できれば書き換えた後に、新たに桁区切りがなされるようにしたいのですがやはり難しいでしょうか?

  • 数字のみの入力制限をかけたTextBoxで、"."の入力も許可したい

    環境はVB.NETです。 以下のコードで、TextBoxへの入力を、0~9の数字のみ(BackSpaceも許可)に制限していますが、"."(少数点)の入力も許可したいです。 e.KeyChar = "."c の判定をIf文に追加してみましたが、実現できませんでした。 ご教授いただけると幸いです。 よろしくお願いします。 Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress  If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then   e.Handled = True  End If End Sub

  • テキストボックスで数値入力制限

    数値しか入力できないようにしているテキストボックスがあります。が、どこを見てもそんな処理は入ってないように見えるんです。 マスクではなくテキストボックスでです。 キープレスでもゴットフォーカスにもそんなロジックはありませんでした。 プロパティには存在しないと思っています。 ソースがあるのにどこに書いてるかわからないというバカぶりですが、どなたかアドバイスお願いします。

  • クラスやモジュールで纏める方法ありますか?

    説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン Private Sub TextBox1_2_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_2.KeyPress If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_4_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_4.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub Private Sub TextBox1_5_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1_5.KeyPress If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack And e.KeyChar <> ","c Then e.Handled = True End If If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub 上記のプログラム、TextBox○○○_5.KeyPressの○○○の部分が1から100まであるのですが、あまりにも行数が多くなって長くなるので、ほかのクラスやモジュールにまとめる方法ってありませんか? よろしくお願いしますm(__)m

  • VB2005 TextBoxの入力制限について

    はじめて質問させていただきます。 現在、VB2005を使ってプログラムを組んでいるのですが、半角カタカナだけをTextBoxに入力し、表示する方法がわかりません。 Private Sub TextBox6_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox6.KeyDown TextBox6.ImeMode = Windows.Forms.ImeMode.KatakanaHalf End Sub Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress If (e.KeyChar < "ア"c Or e.KeyChar > "-"c) And e.KeyChar <> vbBack Then e.Handled = True End If End Sub ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

  • VisualStudioのエラーについて

    VisualStudioでC#の勉強をしているのですが、発生したエラーの原因がわかりません。おそらく初歩的なことが原因と思いますが、ご教示いただけますと幸いです。 状況: ・VisualStudioのデザイナ画面で、テキストボックスAを作成。 ・下記コードを入力し、数字、バックスペース以外の入力を拒否するよう設定。 ------------------------------------- private void textBoxA_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if((e.KeyChar < '0' || '9' < e.KeyChar) && e.KeyChar != '\b'){ e.Handled = true; errorMessage(); } else if(char.IsDigit(e.KeyChar)){ e.Handled = false; } } ------------------------------------- ・ビルドが正常終了したことを確認し、exeファイルを起動。 ・テキストボックスAがフォーカスされた状態で、半角数字、またはバックスペースを押下すると、エラーが表示されます。  →全角文字等は、想定したエラーメッセージが表示されています。 エラーメッセージの内容は以下の通りです。 ------------------------------------- アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました。[続行]をクリックすると、アプリケーションはこのエラーを無視し、続行しようとします。[終了]をクリックすると、アプリケーションは直ちに終了します。 メソッドまたは操作は実装されていません。 ------------------------------------- また、詳細には以下の内容が記載されていました。 ------------------------------------- System.NotImplementedException: メソッドまたは操作は実装されていません。 (中略) ************** JIT デバッグ ************** Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、 またはコンピューター (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを有効にしてコンパイルされなければ なりません。 ------------------------------------- このエラーが発生した原因は何でしょうか。 また、このエラーの対処方法をご教授ください。

  • ExcelVBAでテキストボックスに入力制限をする方法

    Excelのプログラムで、フォームのテキストボックスに数値のみ入力許可したり、文字のみ入力許可したり、特定の文字のみ入力許可にするなど、入力制限を行う方法はどのようにすればよいでしょうか? 回答よろしくお願いします。

  • テキストボックスに既定の入力しかできないようにするには。

    ACCESSで郵便番号を入力するテキストボックスを作成したのですが・・・全角数値しか入力出来ないようにするにはどのようにすれば良いのでしょうか?

  • 数値型のテキストボックスを文字型に変えたい

    環境:XP&ACCESS2003 数値型のコントロールソースを持つテキストボックスがあります。このテキストボックスに、例えば「8+7」と入力するために、文字型に変換したいのですが。 *このコントロールソースの更新後処理に Me!テキスト0 = Eval(テキスト0) と記述しています。 数値型なので、「数値型の為入力できません」旨のエラーが出てしまいます。

  • ACCESS テキストボックスの入力値削除

    こんにちは。ACCESSの初心者です。 現在ACCESSを使ってとある一覧表の入力フォーマットを作成しております。 早速ですが質問です。 フォームのテキストボックスにて入力チェックをしており、間違った値が入力されると、メッセージボックスを出し、その間違った入力値を削除し、カーソルをそのテキストボックスに戻す、ようにしたいのですがどうすればいいのでしょうか? ちなみに現在以下のようなソースを作成しているのですが、(1)と(2)のところがどうすればいいのかわかりません。 If 正しい入力値 then 次のテキストボックスへ移動 else msgbox("入力値エラー") 入力値削除(1) カーソルを戻す(2) end if よろしくお願いします。  

専門家に質問してみよう