Cómo filtrar el cuadro de texto de entrada a sólo numérico?

¿Cómo puedo suprimir todos los datos excepto numérico?

Esto no es trabajar en KeyDown():

If e.KeyData < Keys.D0 Or e.KeyData > Keys.D9 Then
    e.Handled = True
End If
Creo que se puede encontrar su respuesta aquí: stackoverflow.com/questions/463299/… (que no deje de prestar atención al comentario de Jeff Yates)

OriginalEl autor Tom | 2009-06-02

9 Kommentare

  1. 5

    Puede comprobar Char.IsDigit(e.KeyChar), pero la mejor cosa a hacer en este caso es crear una subclase de la caja de texto y reemplazar IsInputChar(). De esa manera usted tiene un reutilizables control de cuadro de texto que se pueden colocar en cualquier lugar para que usted no tenga que volver a aplicar la lógica.

    (Mi VB es un poco oxidado…)

    Public Class NumericTextBox : Inherits TextBox
    
        Protected Overrides Function IsInputChar(Byval charCode As Char) As Boolean
            If (Char.IsControl(charCode) Or Char.IsDigit(charCode)) Then
                Return MyBase.IsInputChar(charCode)
            Else
                Return False
            End If
        End Function
    
    End Class
    No se olvide de dejar (localizada) mil y separadores de decimales
    Será este identificador casos donde se pega el texto en el portapapeles?

    OriginalEl autor Josh

  2. 6

    Hay muchas maneras de hacer esto. He tenido una rápida puñalada en ella y se dirigen a la cual trabaja. He utilizado la Pulsación de tecla sub para el cuadro de texto, y pasar cada pulsación de tecla para la IsNumber función.

    NOTA: me he permitido la tecla de retroceso para ser utilizado en caso de que usted comete un error con los números y quiere eliminado.

    Sacar el Si el correo.KeyChar <> ChrW(Teclas.De vuelta) Entonces /Final Si parte, si usted no necesita la tecla de retroceso.

        Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
        If e.KeyChar <> ChrW(Keys.Back) Then
            If Char.IsNumber(e.KeyChar) Then
            Else
                e.Handled = True
            End If
        End If
    End Sub
    ¿Qué acerca de la tecla de borrar? ¿Qué acerca de cortar y pegar desde el portapapeles?
    Sin duda, podrían ser añadido en el CASO de declaración de ignorar. Buen Punto.

    OriginalEl autor kevchadders

  3. 1

    Este código le ayudará a restringir múltiples TEXTBOX para aceptar sólo VALOR NUMÉRICO y la tecla de RETROCESO. Sin embargo, usted puede quitar Si el correo.KeyChar <> ChrW(Teclas.De vuelta), a Continuación, y Final Si valor de código cuando usted no desea aceptar tecla de retroceso. Versión mejorada de la kevchadders solución en este hilo.

    Private Sub TextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress, TextBox2.KeyPress, TextBox3.KeyPress
        If e.KeyChar <> ChrW(Keys.Back) Then
            If Char.IsNumber(e.KeyChar) Then
            Else
                e.Handled = True
            End If
        End If
    End Sub

    OriginalEl autor Laxmikant Bhumkar

  4. 1

    Le ayuda…

        Public Function IsNumericTextbox(ByVal sender As TextBox, ByVal KeyChar As Char) As Boolean
        'set TRUE: cause a exception when the keychar is not Allowed into vars: allowedChars, allowedOneChar, allowedExceptionChar
        Dim UseThrowDebuggy As Boolean = False
    
        Dim allowedChars As String = "0123456789"
        Dim allowedOnceChar As Char() = {"."}
        Dim allowedExceptionChar As Keys() = {Keys.Back}
    
        Dim idxAllowedNotFound As Integer
        Dim idxCountOne As Integer = 0
    
        idxAllowedNotFound = allowedChars.IndexOf(KeyChar)
        If idxAllowedNotFound = True Then
            'AllowedOnce
            For Each _c As Char In allowedOnceChar
                If _c = KeyChar Then
                    'Count Check
                    For Each _cc As Char In sender.Text
                        If _c = _cc Then idxCountOne += 1
                    Next
                    If idxCountOne = 0 Then
                        Return False
                    Else
                        Return True
                    End If
                End If
            Next
            'Exceptions
            For i As Integer = 0 To allowedExceptionChar.Count - 1
                If Asc(KeyChar) = Convert.ToUInt32(allowedExceptionChar(i)) Then Return False
            Next
            'Not Throw
            If UseThrowDebuggy = False Then
                If Char.IsNumber(KeyChar) Then
                    Return False
                Else
                    Return True
                End If
            End If
            'Outside to end for throw
        Else
            'AllowedChars
            Return False
        End If
    
        Dim _kc As String = ControlChars.NewLine & "Char: " & KeyChar & ControlChars.NewLine & "Asc: " & Asc(KeyChar) & ControlChars.NewLine
        Throw New Exception("UseThrowDebuggy found a unknow KeyChar: " & _kc)
    End Function

    Para utilizar la función agregar este código en un textbox_keypress:

    e.Manejado = IsNumericTextbox(sender, e.KeyChar)

    OriginalEl autor Duke49ifrance

  5. 1
     Public Class NumericTextBox : Inherits System.Windows.Forms.TextBox
    
     Protected Overrides Sub OnKeyPress(e As Windows.Forms.KeyPressEventArgs)
          If Char.IsDigit(e.KeyChar) Or
              Char.IsControl(e.KeyChar) Or
              e.KeyChar = lobalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator Then
          MyBase.OnKeyPress(e)
        Else
            e.Handled = True
        End If
     End Sub
    
     End Class

    OriginalEl autor YaPKnn

  6. 0

    Sugiero que utilice expresiones regulares. Usted puede buscar en Google, como «expresión regular cuadro de texto numérico» y supongo que vendrá con muchos ejemplos.

    Por ejemplo, si usted está en ASP.NET usted puede hacerlo como:

    <asp:TextBox 
        ID="txtPhoneNumber" 
        runat="server" 
        Text='<%#Bind("phoneNumber") %>' 
        MaxLength="15">
    </asp:TextBox>
    
    <asp:RegularExpressionValidator 
        ID="rfvUSerPhoneNumberValidate" 
        runat="server"
        ControlToValidate="txtPhoneNumber" 
        Display="Dynamic" 
        ValidationExpression="^[0-9]{1,15}$"
        ErrorMessage="Please enter only numeric value for Phone Number" 
        EnableViewState="true">
    </asp:RegularExpressionValidator>

    OriginalEl autor aslisabanci

  7. 0

    Esto permitirá una entrada numérica ,la tecla de Retroceso para corregir su entrada , y también un punto decimal.

        If (e.KeyChar < "0" OrElse e.KeyChar > "9") AndAlso e.KeyChar <> ControlChars.Back AndAlso e.KeyChar <> ControlChars.Cr AndAlso e.KeyChar <> "." Then
            Beep()
            e.Handled = True
        End If

    OriginalEl autor user2219334

  8. 0

    Esta es otra manera de restringir el número de entradas en el cuadro de texto . el uso de Eventos de PULSACIÓN de tecla

    Si Asc(e.KeyChar) <> 13 AndAlso Asc(e.KeyChar) <> 8 AndAlso No IsNumeric(e.KeyChar), A Continuación,
    MessageBox.Show(«Sólo Números»)
    e.Handled = True
    End If
    End Sub
    espero que ayude ! thnks ..

    OriginalEl autor Ejie Fernandez

  9. 0

    El propósito de su función podría ayudar a proporcionar soluciones adicionales. La comprobación de un valor numérico en cada Pulsación de tecla es probablemente una exageración. Entonces usted tiene a la exageración más por la contabilidad para el retroceso, eliminar, copiar, pegar, etc.

    Por ejemplo, si se va a almacenar un número de teléfono, debe utilizar el «IsNumeric» la función de validar y actualizar el paso. Alternativamente, si usted está seleccionando la cantidad de un elemento «NumericUpDown» control sería más apropiado que el de un cuadro de texto.

    OriginalEl autor Jon Milliken

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea