• ベストアンサー

数字のみの入力制限をかけた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

  • THUBAN
  • お礼率76% (771/1002)

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

  • ベストアンサー
  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.4

申し訳ない、単純なのに間違っていました。 多分こうでしょう。 これに#2さんの言われる文法に改造してみてください。 If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> "."c And e.KeyChar <> vbBack Then #2さんありがとうございます。 VB.NETは触ったことないので参考になりました。

THUBAN
質問者

お礼

実現しました。 ただ、"1.23.45...68"とか、小数点が複数入力できてしまいますが・・(^^; 小数点を一度しか入力できないように、あとはコードで制限してみたいと思います。 ありがとうございました。

その他の回答 (3)

  • Kuppycat
  • ベストアンサー率50% (109/216)
回答No.3

VB6.0の環境しかないので憶測ですが、 e.KeyChar <> vbDelete(?) を加えてみてはいかがでしょう? VB6.0ではDeleteキーコードで実現するので。 参考とまで。

THUBAN
質問者

お礼

ありがとうございます。 ただ、VB.NETでは、"vbDelete"は使えないようです。

  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.2

こんにちは、じゃんぬねっと と申します。(毎度のことです) それと、「"."c を加えてダメでした」では解決につながりませんね。 加えてダメであれば、他の条件をすべてコメントアウトして、"."c オンリーで行うなどしてください。 わからないからすべて聞くのではなく、色々試すようにしましょう。 その上でわからなければ、答えを出すしかないですが... (^-^;) > #1の方へ えっと、AndAlso と OrElse にした方が良いですね。

THUBAN
質問者

補足

条件をすべてコメントアウトして実行しましたが。 やダメでした。 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 Or e.KeyChar = "."c) And e.KeyChar <> vbBack Then   e.Handled = True  End If End Sub ちなみに以下のようにして試してみましたが、ダメでした。  If e.KeyChar = "."c Then   e.Handled = True  End If

  • iiikkk
  • ベストアンサー率37% (92/247)
回答No.1

If (e.KeyChar < "0"c Or e.KeyChar > "9"c Or e.KeyChar = ".") And e.KeyChar <> vbBack Then 単純にこうではいけないのですか?

THUBAN
質問者

補足

はい、わたしもそういう指定で大丈夫かとおもいましたが、"."(少数点)が入力許可されませんでした。

関連するQ&A

  • 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 ↑見にくいかもしれませんがコードです。 この方法ではだめなのでしょうか? 回答をお願いします

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

    説明が非常にへたくそなので、プログラムをそのまま書きます・・・・ スイマセン 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

  • 特定の文字を、入力文字数に含めない方法は(VB.NET)

    VB.NETにて特定の文字を、入力文字数に含めないようにするにはどのような処理を行ったらよいのでしょうか? 以下は実際に試みた方法です。「型 'TextBox' でパブリック メンバ 'TextLength' が見つかりません。」というエラーがおきました。 Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox.KeyPress 'マイナスかドットであるか判定 If e.KeyChar = "-" OrElse e.KeyChar = "." Then sender.TextLength = sender.TextLength - 1 End If End Sub

  • ↓Downキーでフォーカスの移動ができません。

    ご多忙中申し訳ありません。 TextBoxが複数ありまして、↓キーを使用してフォーカスの移動をタブインデックスに従って変更したいのですが、Enterキーなら順番に移動しますが、Downキーですと何も変化がありません。 Downキーの場合は何か、コードの追加が必要でしょうか? あと、できれば←や↑ →なども使用してフォーカスの移動をしたいとおもいますが アドバイスをお願いします。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.KeyPreview = True End Sub Private Sub Form1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If e.KeyChar = Chr(Keys.Down) Then  '←ここの部分がEnterキーならフォーカスの移動ができます。 Me.SelectNextControl(Me.ActiveControl, True, True, True, True) e.Handled = True End If End Sub 申し訳ありません。宜しくお願いします。

  • VisualBasic.NETでのソースの意味がわかりません…。

    Dim misscount As Integer Dim istypemode As Boolean Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim s() As String = New String() {"datemasamune", "sanadayukimura", "tyousokabemototika", "morning", "hyper", "newspaper"} Dim word As String = s(New Random().Next(0, s.GetUpperBound(0) + 1)) Label1.Text = word Label2.Text = "" istypemode = True End Sub Private Sub Form1_keypress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress If istypemode And Not Char.IsControl(e.KeyChar) Then If e.KeyChar = Label1.Text.Chars(Label2.Text.Length) Then Label2.Text &= e.KeyChar End If End If End Sub ------------- 以上のソースがあるのですが、どこでどうなっているというのを教えてほしいです。 もし意味不明な部分とかありましたら教えてください。

  • ドロップダウンした状態でカーソルが表示されません

    VB.Net初心者です。 Win2003Server+SQL2000+VB2008の組合せで 作っています。 入力用のフォームを作り下記の操作のプログラムを書きました。 1.文書名TextBoxにデーター入力しEnterキー入力時に次のComboBoxに移動 2.作成者ComboBoxにアクティブコントロールになった時ドロップダウンする。 プログラムは下記の様に書きました。 1. Private Sub 文書名TextBox_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles 文書名TextBox.KeyPress If e.KeyChar = Chr(Keys.Enter) Then Me.SelectNextControl(sender, True, True, True, True) e.Handled = True End If End Sub 2. Private Sub 作成者ComboBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 作成者ComboBox.Enter Me.作成者ComboBox.DroppedDown = True End Sub これをデバックすると動くのですが、 作成者ComboBoxがドロップダウンした状態でリストの中から データーを選べるのですが、カーソルが表示されません。 フォームから外れた所では出てくるのですが・・・ どうもフォームの後ろに回っているようなんです。 添付画像でリストの中で色が変わっている所が選んだ所です。 マウスを動かせば他も選択出来ますが、カーソルがフォーム上に出ていません。 カーソルを表示させるにはどうしたらいいのでしょうか。 2.のプログラムを外して、自分でリストボタンを押すとカーソルは出てきます。 ここでひっかかって先に進めなく困っています。 どなたかご存知の方教えてください。

  • 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へ文字列をD&Dをする方法を教えてください。

    Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text)(0) End Sub VB.NETで上記のような方法でドラッグされたテキストを テキストボックスに表示するようにしたいのですが、 この方法だと最初の一文字しかドロップされません。 どこか修正箇所などありましたら、ご教示いただけると助かります。

  • 【プログラミング】ショートカットキーの設定について

    KeyPress イベントプロシージャの設定で Private Sub Button1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles Button1.KeyPress If e.KeyChar(Keys.F) Then End If End Sub この中にボタン1の命令をさせたいとき、どのように書けばいいんでしょうか? Visual Basic 2010です コードを教えてください、お願いします

  • VC++ TextBoxの定義

    お世話になります。 c++でTextBoxの入力制限(数値のみ)を、下記URLを参考に作成しているのですが、 TextBoxの動作を定義するところが、コンパイルエラーになります。 http://dobon.net/vb/dotnet/control/numerictextbox.html 【エラーになる定義部】 this->TextBox->KeyPress += System::Windows::Forms::KeyEventHandler(this, &MainForm::KeyPressEventArgs); ※ エラー内容は「XXXはYYYのメンバではありません」 「system::」のところか「&MainForm」のところの定義が悪いのだと思うのですが、 どの様に宣言すればよいのか教えていただけないでしょうか 【関数】 System::Void TextBox_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) { 本文 }

専門家に質問してみよう