¿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 Comentarios

  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

Dejar respuesta

Please enter your comment!
Please enter your name here