none
como hacer que un textbox accepte solo valores numericos en visual basic.net 2008

    Pregunta

  • Estoy tratando de hacer una nota de remición, y para ello necesito que los textbox que estoy usando, accepten solo valores numericos, y asi poder realizar operaciones. O almenos creo que solo eso necesito, si requiero de algo mas, porfavor avisen.

    viernes, 16 de septiembre de 2011 22:00

Todas las respuestas

  • Hola Yakite

    Tienes 2 opciones:

    Usar un MaskedTextbox o: 

    C#

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsControl(e.KeyChar) 
            && !char.IsDigit(e.KeyChar) 
            && e.KeyChar != '.')
        {
            e.Handled = true;
        }
    
        // solo se permite un punto decimal
        if (e.KeyChar == '.' 
            && (sender as TextBox).Text.IndexOf('.') > -1)
        {
            e.Handled = true;
        }
    }
    

    VB.NET

    Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    	If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."C Then
    		e.Handled = True
    	End If
    
    	' solo se permite un punto decimal
    	If e.KeyChar = "."C AndAlso TryCast(sender, TextBox).Text.IndexOf("."C) > -1 Then
    		e.Handled = True
    	End If
    End Sub

     

    Un Saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    sábado, 17 de septiembre de 2011 1:50
  • pero no me acepta el handled ni el keychar.

    sera porque es visual basic.net 2008

    sábado, 17 de septiembre de 2011 18:10
  • Hola

    Eso no tiene nada que ver... que lenguaje usas? VB o C#? 

    Además mira la referencia a KeyPressEventArgs, ahí verás el uso que le dan a Handled y a KeyChar

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    sábado, 17 de septiembre de 2011 19:59
  • Ya lo arregle, usted tenia razon.

    ya con esto podre hacer operaciones?

    sábado, 17 de septiembre de 2011 20:31
  • tengo un problema.

    El metodo que me dio solo me deja hacer el efecto en un solo textbox, y tengo que emplearlo en 23 texbox para asi poder hacer operaciones.

    que tengo que hacer? 

    sábado, 17 de septiembre de 2011 23:56
  • Hola

    Te doy tres opciones:

    1) Registrar el evento KeyPress a todos los textbox, es decir, seleccionas el textbox vas a la pestaña de eventos y en el evento keypress pones el evento generico que sería el que ya previamente te dí.

    2) Usar el MaskedTextBox como ya te había dicho previamente

    3) Implementar tu propio TextBox que solo admita los números, ejemplo: http://msdn.microsoft.com/es-es/library/ms229644(v=VS.90).aspx#Y0

     

    Un saludo


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    domingo, 18 de septiembre de 2011 0:43
  • El lenguaje que estoy usando es en VB.net 2008. Esto es lo que he hecho:

    Private Sub TextBox4_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress
            If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then
                e.Handled = True
            End If
    
            ' solo se permite un punto decimal
            If e.KeyChar = "."c AndAlso TryCast(sender, TextBox).Text.IndexOf("."c) > -1 Then
                e.Handled = True
            End If
        End Sub
    
        Private Sub TextBox6_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress
            If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then
                e.Handled = True
            End If
    
            ' solo se permite un punto decimal
            If e.KeyChar = "."c AndAlso TryCast(sender, TextBox).Text.IndexOf("."c) > -1 Then
                e.Handled = True
            End If
    
        End Sub

    Lo que pasa es que solo me funciona con e texbox4 pero no me quiere funcionar, con los otros. Ya use el evento keypress y use el evento generico que me dio:

    Private Sub textBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."C Then
    e.Handled = True
    End If

    ' solo se permite un punto decimal
    If e.KeyChar = "."C AndAlso TryCast(sender, TextBox).Text.IndexOf("."C) > -1 Then
    e.Handled = True
    End If
    End Sub

    pero solo me lo acepta el primera textbox al que se lo puse, que seria el 4, pero ya en los demas no me deja, y no se porque.

     

    domingo, 18 de septiembre de 2011 17:51
  • Hola Yakite

    Haz esto:

     

    Private Sub TextBox_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox4.KeyPress, TextBox6.KeyPress, TextBox7.KeyPress, y el resto
    If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "."c Then e.Handled = True End If ' solo se permite un punto decimal If e.KeyChar = "."c AndAlso TryCast(sender, TextBox).Text.IndexOf("."c) > -1 Then e.Handled = True End If End Sub

     


    Antonio Lobo
    Para el correcto funcionamiento, y que otros usuarios se puedan beneficiar de la solucion de esta pregunta por favor marca las respuestas que te hayan ayudado como "Respuesta".
    Si la respuesta te ha sido util Votala.
    Mi blog
    domingo, 18 de septiembre de 2011 19:33