このページをはてなブックマークに追加このページを含むはてなブックマーク このページをlivedoor クリップに追加このページを含むlivedoor クリップ

目次

TextBoxにおけるキー入力のキャプチャ

数値のみを入力可能にする1

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows. Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        '半角数値(0〜9)と BaclSpace のみ入力を可能にする
        If (e.KeyChar < "0"c Or e.KeyChar > "9"c) And e.KeyChar <> vbBack Then
         e.Handled = True
        End If
End Sub

数値のみを入力可能にする2

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
 Dim bKeyNum As Boolean = Char.IsDigit(e.KeyChar)
 If bKeyNum <> True Then
  e.Handled = True
 End If
End Sub

 "e.Handled = True"はKeyPressイベントをキャンセルしてテキストボックスに表示しないことを意味する。

[注意]ただし、コピペされた場合は数値以外も入力される。これを防ぐためには、TextChangedイベントに次のようなコードを書いておく。

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
 'テキストのTextプロパティの値を1文字ずつ数値か否かを判定し、数値でない場合は破棄、数値であれば表示する。
 Dim newText As System.Text.StringBuilder = New System.Text.StringBuilder(Text.Length)
 For Each ch As Char In TextBox1.Text
  If Char.IsDigit(ch) = True Then
   ''文字(ch)が10進数の数値であれば、新しい文字列オブジェクトに追加していく。
   newText.Append(ch)
  End If
 Next

 '文字列オブジェクトnewTextをテキストボックスに表示する。
 If (TextBox1.TextLength <> newText.Length) Then
  Dim start As Integer = TextBox1.SelectionStart
  Dim len As Integer = TextBox1.SelectionLength
  TextBox1.Text = newText.ToString()
  If start >= 0 And len >= 0 Then
   TextBox1.SelectionStart = start
   TextBox1.SelectionLength = len
  End If
 End If
End Sub

 SelectionStartプロパティはテキストボックスで選択されているテキストの開始点を示すプロパティである。もし、TextBox1.SelectionLengthが0ならばカレットの位置になる。

 また、SelectionLengthプロパティはテキストボックスで選択されている文字列の長さのプロパティである。 ◇

[注意]テキストボックスに"あ1"と入力したりコピペすると、"1"が表示される。 ◇

[注意]"1"(全角)も表示される。 ◇

[Enter]キーを受け取る

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
 If e.KeyChar = Chrw(Keys.Return) Then
  (処理)
  e.Handled = True
 End If
End Sub

参考文献