web-dev-qa-db-ja.com

テキストボックスの数字のみを受け入れる

テキストボックスに数字のみを受け入れるようにするためのこのコードを見つけました。

Private Sub TextBox1_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    Dim allowedChars As String = "0123456789"
    If allowedChars.IndexOf(e.KeyChar) = -1 Then
        ' Invalid Character
        e.Handled = True
    End If
End Sub

しかし...ユーザーはバックスペースボタンを使用して番号を削除することはできません。それではどうすればよいですか?

7
Voldemort

貼り付けられたテキストも処理する必要があります(キーが押されていない場合があります)。これを行う最良の方法は、 MaskedTextBox を使用することです。

7
Joel Coehoorn
 Private Sub txtValue_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles                 txtValue.KeyPress
        'Dim allowedChars As String = "0123456789"
        'If allowedChars.IndexOf(e.KeyChar) = -1 Then
        '    ' Invalid Character
        '    e.Handled = True
        'End If
        'If (e.KeyChar = Microsoft.VisualBasic.Chr(8)) Then
        '    e.Handled = True
        'End If
        If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False Then
            e.Handled = True
        End If
    End Sub                                
10
LV Ganesh

ヴォルデモート

ユーザーが削除できるように最初のコードを開発します。

コードは次のとおりです。

Dim BACKSPACE As Boolean

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Back Then
        BACKSPACE = True
    Else
        BACKSPACE = False
    End If
End Sub

Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If BACKSPACE = False Then
        Dim allowedChars As String = "0123456789"
        If allowedChars.IndexOf(e.KeyChar) = -1 Then
            e.Handled = True
        End If
    End If
End Sub

私のコードがあなたに役立つことを願っています:)

3
Mousa Alfhaily

このコードを使用すると、役に立ちます

Public Function OnlyDigitsOnKeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)

Try

    If System.Char.IsDigit(e.KeyChar) = False And e.KeyChar <> Microsoft.VisualBasic.Chr(8)        And e.KeyChar <> Microsoft.VisualBasic.Chr(46) Or (InStr(sender.text, ".") > 0 And  e.KeyChar = Microsoft.VisualBasic.Chr(46)) 
    Then
                e.Handled = True
    End If
        Catch ex As Exception
            Common.ErrorHandler(ex)
        End Try
End Function
1
KFC

数字のみを受け入れる入力が必要な場合、通常はNumericUpDownクラスを使用しました。制限と小数も処理します。

1
djv

これが私が書いたコードです。これにより、ユーザーは削除でき、必要に応じてテキストボックスを空白にすることができます。ユーザーが許可されていない文字を入力したときに処理し、ユーザーがテキストボックスにテキストを貼り付けたときにも処理します。ユーザーが有効な文字と無効な文字が混在する文字列をボックスに貼り付けると、有効な文字がテキストボックスに表示され、無効な文字は表示されません。

また、カーソルが正常に動作することを保証するロジックもあります。 (テキストを新しい値に設定する際の問題は、カーソルが最初に戻ることです。このコードは元の位置を追跡し、削除された無効な文字を考慮して調整を行います。)

このコードは、任意のテキストボックスのTextChanedイベントに配置できます。テキストボックスに一致するように、必ずTextBox1から名前を変更してください。

    Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    Dim selStart As Integer = TextBox1.SelectionStart
    Dim selMoveLeft As Integer = 0
    Dim newStr As String = "" 'Build a new string by copying each valid character from the existing string. The new string starts as blank and valid characters are added 1 at a time.

    For i As Integer = 0 To TextBox1.Text.Length - 1

        If "0123456789".IndexOf(TextBox1.Text(i)) <> -1 Then 'Characters that are in the allowed set will be added to the new string.
            newStr = newStr & TextBox1.Text(i)

        ElseIf i < selStart Then 'Characters that are not valid are removed - if these characters are before the cursor, we need to move the cursor left to account for their removal.
            selMoveLeft = selMoveLeft + 1

        End If
    Next

    TextBox1.Text = newStr 'Place the new text into the textbox.
    TextBox1.SelectionStart = selStart - selMoveLeft 'Move the cursor to the appropriate location.
End Sub

注-多数のテキストボックスに対してこれを行う必要がある場合は、テキストボックスへの参照をパラメーターとして受け入れるサブを作成することで、これの汎用バージョンを作成できます。次に、TextChangedイベントからsubを呼び出すだけです。

0
Allen
 Private Sub txtValue_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtValue.KeyPress
    Dim allowedChars As String = "."
    'If allowedChars.IndexOf(e.KeyChar) = -1 Then
    '    ' Invalid Character
    '    e.Handled = True
    'End If
    'If (e.KeyChar = Microsoft.VisualBasic.Chr(8)) Then
    '    e.Handled = True
    'End If
    If Char.IsDigit(e.KeyChar) = False And Char.IsControl(e.KeyChar) = False And allowedChars.IndexOf(e.KeyChar) = -1 Then
        e.Handled = True
    End If
End Sub
0
Private Sub TMarksTextBox_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TMarksTextBox.KeyPress
        If e.KeyChar < "0" OrElse e.KeyChar > "9" AndAlso e.KeyChar <> ControlChars.Back Then
            e.Handled = True
        End If
End Sub
0
Phillip Olivier