none
TextBox que solo acepte numeros

    Question

  • Bueno, el titulo lo describe todo, como hacer un textbox que solo permita ingresar numeros? Ya que en Compact Framework al parecer no dispongo del maskedTextBox, mi idea es capturar el evento keypress y preguntar si se trata de un numero, si es asi, que lo inserte en el textbox, sino es un numero, que ignore. Como podria plasmarlo en codigo? o a alguien se le ocurre otra manera de implementarlo? Uso vs2008. Muchas gracias
    Monday, May 11, 2009 6:54 AM

Answers

  • Hola Martin también estuve realizando una aplicación con CF donde tenía un textbox que solo tenía que permitir números y utilice la siguiente porción de código en VB.net

        Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
                If Not IsNumeric(e.KeyChar) Then
                    e.Handled = True
                End If
        End Sub
    Espero te sirva.

    Saludos,

    BogotaDotNet Comunidad de Desarrolladores
     John Alexander Bulla Torres

    Ingeniero de Sistemas

    MCTS - SQL Server™ 2005 | DCE Gold

    Blog | Web Site 

     

    [Si te sirve esta respuesta por favor márcala como útil]

    Monday, June 08, 2009 5:14 PM
  • aqui te dejo una solucion:

    captura el evento con
    private void tuTextBox_KeyPress(object sender, KeyPressEventArgs e)
            {
                ..................
    }

    y dentro de ella llamas a mi funcion :

    public bool isCaracterValido(Char c)
            {
                if ((c >= '0' && c <= '9'))
                {
                    return true;
                }
                return false;
            }

    espero haberte ayudado
    Tuesday, June 16, 2009 4:55 PM

All replies

  • Lo más cómodo es que te hagas un control que herede de TextBox en el que sobrescribas OnKeyPress. Luego, según la tecla que recibas, devuelves KeyPressEventAgrs.Handled como true si la tecla recibida no la quieres mostrar.

    Ahora, dependiendo del formato numérico que quieras aceptar y de la funcionalidad que quieras darle al control, tendrás que dejar que se pulsen otras teclas aparte de números, como el Backspace para borrar, el punto o la coma, el menos y el más, etc.

    Un saludo,

    Alejandro Mezcua
    http://www.byteabyte.net/
    Monday, May 11, 2009 10:24 AM
  • Hola Martin también estuve realizando una aplicación con CF donde tenía un textbox que solo tenía que permitir números y utilice la siguiente porción de código en VB.net

        Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
                If Not IsNumeric(e.KeyChar) Then
                    e.Handled = True
                End If
        End Sub
    Espero te sirva.

    Saludos,

    BogotaDotNet Comunidad de Desarrolladores
     John Alexander Bulla Torres

    Ingeniero de Sistemas

    MCTS - SQL Server™ 2005 | DCE Gold

    Blog | Web Site 

     

    [Si te sirve esta respuesta por favor márcala como útil]

    Monday, June 08, 2009 5:14 PM
  • aqui te dejo una solucion:

    captura el evento con
    private void tuTextBox_KeyPress(object sender, KeyPressEventArgs e)
            {
                ..................
    }

    y dentro de ella llamas a mi funcion :

    public bool isCaracterValido(Char c)
            {
                if ((c >= '0' && c <= '9'))
                {
                    return true;
                }
                return false;
            }

    espero haberte ayudado
    Tuesday, June 16, 2009 4:55 PM
  • El problema de esta aproximación es que sólo acepta números enteros positivos, pero no puedes introducir números negativos, decimales, ni tampoco borrar caracteres ya que, a no ser que esos caracteres los trates en el evento KeyPress aparte, te los rechazará. Si sólo se necesitan esos valores enteros positivos está bien, pero si se necesita algo más hay que filtrar más caracteres y tener cuidado con los caracteres que se aceptan como separadores decimales.

    Un saludo,

    Alejandro Mezcua
    http://www.byteabyte.net/
    Friday, June 19, 2009 12:15 PM
  •     private void txt_numero_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
    Thursday, June 07, 2012 2:35 PM
  • Se que la pregunta ya está desde hace tiempo, pero seguro alguien tendrá la misma pregunta y llega hasta acá para solucionar el problema.

    Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
         If Not IsNumeric(e.KeyChar) Then
              e.Handled = True
         End If
    End Sub

    El código propuesto por John funciona, pero ojo solo con números enteros positivos.

    Como el valor devuelto por Not IsNumeric(e.KeyChar) es un booleano y el asignado a e.Handled también, se puede asignar directamente.

    Private Sub textbox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles textbox1.KeyPress
         e.Handled = Not IsNumeric(e.KeyChar)
    End Sub

    Y de esta manera se permiten caracteres de control, por ejemplo para permitir borrar el número. Cosa que no se puede hacer con el código anterior.

    Private Sub txtIdPaciente_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtIdPaciente.KeyPress
         e.Handled = Not IsNumeric(e.KeyChar) And Not Char.IsControl(e.KeyChar)
    End Sub

    • Edited by César Delseggio Friday, August 03, 2012 12:13 AM
    • Proposed as answer by elokrpo Friday, July 05, 2013 3:35 PM
    Thursday, August 02, 2012 1:34 AM
  • Que tal mira Martín esta la encontré por ahí es una clase y dentro unas funciones la modifique a MaskedBox pero original era con textbox es un cambio muy sencillo. pero la modifique para que acepte números negativos y positivos de forma -140.00 y 140.00 ojala te sirva

    la clase la llame clase y la llamo asi en evento keypress de maskedtextbox

     clase.NumeroDecMasked(e, Me.elMaskedtextbox)

    la función es..

     Function NumeroDecMasked(ByVal e As System.Windows.Forms.KeyPressEventArgs, ByVal Text As MaskedTextBox) As Integer
            Dim dig As Integer = Len(Text.Text & e.KeyChar)
            Dim a, esDecimal, NumDecimales As Integer
            Dim esDec As Boolean
            ' se verifica si es un digito o un punto para el decimal 
            If e.KeyChar.IsDigit(e.KeyChar) Or e.KeyChar = "." Or e.KeyChar = "-" Then
                e.Handled = False
            ElseIf e.KeyChar.IsControl(e.KeyChar) Then
                e.Handled = False
                Return a
            Else
                e.Handled = True
            End If
            If dig = 1 And e.KeyChar = "." Then 'si dig=1 y es un punto rechaza 
                e.Handled = True
                Return a
            End If
            If dig = 1 And e.KeyChar = "-" Then 'si dig es la posicion 1 entonces acepta el guion
                e.Handled = False
                Return a
            End If
            If dig > 1 And e.KeyChar = "-" Then 'si el digito es mayor a uno rechaza el guion ya que solo puede ir al principio
                e.Handled = True
                Return a
            End If
            If Text.SelectedText = "" Then
                ' aqui se hace el for para controlar que el numero sea de dos digitos - contadose a partir del punto decimal.
                For a = 0 To dig - 1
                    Dim car As String = CStr(Text.Text & e.KeyChar)
                    If car.Substring(a, 1) = "." Then
                        esDecimal = esDecimal + 1
                        esDec = True
                    End If
                    If esDec = True Then
                        NumDecimales = NumDecimales + 1
                    End If
                    ' aqui se controla los digitos a partir del punto numdecimales = 4 si es de dos decimales  
                    If NumDecimales >= 4 Or esDecimal >= 2 Then
                        e.Handled = True
                    End If
                Next
            End If
        End Function

    Tuesday, May 07, 2013 5:26 PM
  • Excelente explicación Cesar y en solo 1 linea de código, la ultima me sirvió mucho gracias.. VB 2012 Express
    Friday, July 05, 2013 3:37 PM
  • muy bueno :)

    Friday, January 17, 2014 4:18 PM
  •     private void txt_numero_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (Char.IsDigit(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }

    hola colegas como puedo modificar este código para que me acepte números con signo negativo

    saludos cordiales

    Friday, June 27, 2014 3:59 PM