*目次 [#y615b2c4]

#contents


*TextBoxにおけるキー入力のキャプチャ [#h93e5ec4]

**数値のみを入力可能にする1 [#zfeb4575]

 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 [#d3599147]

 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]キーを受け取る [#ldeb392e]

 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


*参考文献 [#t7f09fbc]

-『【短期間で学べるプログラミング】Visual Basic 2005クイックレシピ』
-http://www.microsoft.com/japan/msdn/vbasic/migration/tips/NumericEdit/