none
ENMASCARAR UN TEXTBOX CON ENTEROS Y DECIMALES. RRS feed

  • Pregunta

  • Buenas noches, gusto en saludarles.

    Mi problema es que tengo un programa en vb 2012 y necesito mostrar en un formulario, específicamente en un textbox montos con enteros y decimales, ejemplo: debe aparecer 123.50 o 56.25 o 1234.78, los ceros a la derecha queden suprimidos. este campo en access lo declare DOUBLE con 2 decimales y el resultado me sale con 4 decimales y sin signo de separación.

    Tambien como valido que los datos que se introduzcan en textbox sean solo numéricos? si llevan decimales debe ser string?

    Agradezco el apoyo que me pueda dar la comunidad.

    martes, 16 de febrero de 2016 2:28

Todas las respuestas

  • Para validar la introducción de datos numéricos con decimales puedes usar algo como esto:

        Private Sub txtCobrado_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtCobrado.KeyPress
            Dim separadorDecimal As String = Threading.Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator
            If ((e.KeyChar = "."c) OrElse (e.KeyChar = ","c)) Then
                ' Si en el control hay ya escrito un separador decimal, deshechamos insertar otro separador más.
                If (txtCobrado.Text.IndexOf(separadorDecimal) >= 0) And Not (txtCobrado.SelectionLength <> 0) Then
                    e.Handled = True
                    Return
                Else
                    If ((txtCobrado.TextLength = 0) OrElse (txtCobrado.SelectionLength > 0) OrElse _
                    ((txtCobrado.TextLength = 1) And (txtCobrado.Text.Chars(0) = "-"c))) Then
                        ' Si no hay ningún número, insertamos un cero antes del separador decimal.
                        txtCobrado.SelectedText = "0"
                    End If
                    ' Insertamos el separador decimal.
                    e.KeyChar = CChar(separadorDecimal)
                    Return
                End If
            End If
            If (Convert.ToInt32(e.KeyChar) = 8) Then
                ' Se ha pulsado la tecla retroceso
                Return
            ElseIf (Not (Char.IsDigit(e.KeyChar))) Then
                ' No se ha pulsado un dígito.
                e.Handled = True
                Return
            End If
            ' Si existe el separador decimal, no permitimos que se escriban más de 2 números decimales.
            Dim index As Integer = txtCobrado.Text.IndexOf(separadorDecimal)
            If (index >= 0) Then
                Dim decimales As String = txtCobrado.Text.Substring(index + 1)
                e.Handled = (decimales.Length = 2)
            End If
            ' Si el texto del control actualmente está seleccionado, permitimos que se pueda reemplazar por el carácter tecleado.
            If (txtCobrado.SelectionLength > 0) Then e.Handled = False
    
        End Sub

    En el ejemplo solo se admiten dos decimales.

    Para eliminar los ceros por la derecha en decimales puedes usar la función Val:

    Microsoft.VisualBasic.Val("123.40") te devolverá 123.4


    Saludos, Javier J

    martes, 16 de febrero de 2016 7:57