VisualBasicのテキストボックスで数値を扱う場合、何もしなければ数字以外のアルファベットや、漢字も入力できます。
数字だけを入力させるためにキー入力を制限したり、入力結果が数字かどうか判断するためのチェックをかける処理を紹介します。
- 数字以外のキー入力を制限する
- 数値以外が入力された場合はテキストエリアをクリアする
- 正しく数値が入力されたときはカンマ編集文字を表示する
コーディングは以下のようになります。
数値だけ入力できるようにKEY入力を制限する
KeyPressイベントにて、数字とカンマやピリオドなどの数値入力に使わない文字は入力できないように、キー入力を制限します。
'------------------------------------
' 数字だけ入力可とする
'------------------------------------
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress _
, TextBox2.KeyPress _
, TextBox3.KeyPress
If Not ((e.KeyChar >= "0"c AndAlso e.KeyChar <= "9"c) _
OrElse e.KeyChar = ControlChars.Back _
OrElse e.KeyChar = "." OrElse e.KeyChar = "," _
OrElse e.KeyChar = "+" OrElse e.KeyChar = "-") Then
e.Handled = True
End If
End Sub
Handles以降にテキストボックスを3つ記入しています、ここには数値制限したいテキストボックスをすべて記入します。
「e.KeyChar」で数値入力に使用するキーの評価を行います。0~9の数字とBackSpace、ピリオド、カンマ、プラス、マイナスを許可しています。それ以外は「e.Handled=True」でキー入力をキャンセルすることで文字入力をできないようにしています。
“0”c、”9″cはChar型として文字を扱っています、”0″、”9″でも問題ありません。
数値の場合はカンマ編集で表示する
Leaveイベント発生時に同じテキストボックスに、カンマ編集した値を戻します。
'-------------------------------------
' 数値の場合はカンマ編集で表示する
'-------------------------------------
Private Sub TextBox1_Leave(sender As Object, e As EventArgs) Handles TextBox1.Leave _
, TextBox2.Leave _
, TextBox3.Leave
Dim C As Control = CType(sender, Control)
If Not (C.Text = "") Then
If IsNumeric(C.Text) Then
C.Text = String.Format("{0:#,0.0}", CLng(C.Text))
Else
C.Text = ""
C.Focus()
End If
End If
End Sub
Handles以降にテキストボックスを3つ記入しています、ここにはカンマ編集したいテキストボックスをすべて記入します。
Dim C As Control = CType(sender, Control)
変数cをControl属性で宣言して、Ctype(sender,Control)で引数からLeaveイベントが発生したコントロールをセットします。
If Not (C.Text = "") Then
If IsNumeric(C.Text) Then
・・・
Else
C.Text = ""
C.Focus()
End If
End If
何も入力されていない場合は何もしません。
IsNumericで数値の場合だけ処理します、数値以外はエラーとしてテキストボックスをクリアしてFocus()します。
KeyPressイベントで数字キーの制限をしていますが、ここではプラスやマイナス、ピリオドなどの組み合わせで、数値以外が入力された場合はエラーとして、入力させないことを目的としています。
例えば「00…」はキー入力できますが、数値として認められないので、ここでエラーにします。
C.Text = String.Format("{0:#,0.0}", CLng(C.Text))
String.Formatでカンマ編集を行います。詳細はわかりませんが{0:#0,0.0}の0:の部分は0番目のパラメータであり、この場合「Clng(c.Text)」を指しています。
C.Text = CLng(C.Text).ToString("#,0.0")
ちなみにToStringでも試しましたが、これでもできました。こちらのほうが頭に入りやすいですね。
テキストボックスの数値処理を紹介しました。
もちろん方法は様々あるので、皆さんがやりやすい方法でコーディングしてください。