none
Como Puedo evitar este error en textbox RRS feed

  • Pregunta

  • Buenas, estoy haciedo un sub donde quiero manejar varios textbox que valla ejecutando el sub cada vez que escribo en cada textbox me lanza este error y no consigo dar con la solucion

    Gracias

    Sub Evaporacion()
            If IsNumeric(Text_Evapo1.Text) Or IsNumeric(Text_Evapo2.Text) Or IsNumeric(Text_Evapo3.Text) Or IsNumeric(Text_Evapo4.Text) Then
            Else
                Dim density1 As Decimal = Text_Evapo1.Text
                Dim density2 As Decimal = Text_Evapo4.Text
                Dim timeValue As Decimal = Text_Evapo3.Text
                Dim volume As Decimal = Text_Evapo2.Text
                If Text_Evapo1.Text.Contains(".") Then
                    Text_Evapo1.MaxLength = 5
                    If Text_Evapo1.TextLength = 5 Then
                        If (density1.ToString.IndexOf(".") <> -1) Then
                            density1 = density1.ToString.Replace(".", "")
                        End If
                        density1 = ((density1) - 1000)
                        MsgBox(density1)
                    End If
                Else
                    Text_Evapo1.MaxLength = 4
                    If Text_Evapo1.TextLength = 4 Then
                        density1 = ((density1) - 1000)
                        MsgBox(density1)
                    End If
                End If
            End If
        End Sub

    lo puedo solucionar cambiando el or por and pero lo que busco es que cambien cada vez que cambio un textbox no cuando este escrito los cuatro


    • Editado Diablo_Rojo martes, 20 de marzo de 2018 17:18
    martes, 20 de marzo de 2018 17:15

Respuestas

  • Nunca asigne textos que un usuario escribe directamente a una variable numérica (o de tipo fecha).  Los usuarios se equivocan, digitan letras, etc.

    Dim numero As Decimal
    
    If Not Decimal.TryParse(txtCasillaDeTexto.Text, numero) Then
        Exit Sub
    End If
    'Si llegamos aquí, lo que está en la casilla de texto es correcto
    'y la variable "numero" contiene el valor correctamente convertido.
    


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Diablo_Rojo martes, 20 de marzo de 2018 19:22
    martes, 20 de marzo de 2018 17:19
    Moderador

Todas las respuestas

  • Nunca asigne textos que un usuario escribe directamente a una variable numérica (o de tipo fecha).  Los usuarios se equivocan, digitan letras, etc.

    Dim numero As Decimal
    
    If Not Decimal.TryParse(txtCasillaDeTexto.Text, numero) Then
        Exit Sub
    End If
    'Si llegamos aquí, lo que está en la casilla de texto es correcto
    'y la variable "numero" contiene el valor correctamente convertido.
    


    Jose R. MCP
    Code Samples

    • Marcado como respuesta Diablo_Rojo martes, 20 de marzo de 2018 19:22
    martes, 20 de marzo de 2018 17:19
    Moderador
  • Gracias por responder ya no me da el error 

    pero ahora tengo que escribir todos los textbox para que me ejecute la formula

    Lo e puesto de esta manera 

    lo que busco es que cada vez que cambie uno de los textbox me calcule y no tener que esperar a tener todos rellenos

     Sub Evaporacion()
            'Dim numero As Decimal
            Dim density1 As Decimal
            Dim density2 As Decimal
            Dim timeValue As Decimal
            Dim volume As Decimal
            If Not Decimal.TryParse(Text_Evapo1.Text, density1) Or Not Decimal.TryParse(Text_Evapo2.Text, timeValue) Or Not Decimal.TryParse(Text_Evapo3.Text, volume) Or Not Decimal.TryParse(Text_Evapo4.Text, density2) Then
                Exit Sub
            End If
            If Text_Evapo1.Text.Contains(".") Then
                Text_Evapo1.MaxLength = 5
                If Text_Evapo1.TextLength = 5 Then
                    If (density1.ToString.IndexOf(".") <> -1) Then
                        density1 = density1.ToString.Replace(".", "")
                    End If
                    density1 = ((density1) - 1000)
                    MsgBox(density1)
                End If
            Else
                Text_Evapo1.MaxLength = 4
                If Text_Evapo1.TextLength = 4 Then
                    density1 = ((density1) - 1000)
                    MsgBox(density1)
                End If
            End If

    End sub

    martes, 20 de marzo de 2018 17:56
  • lo que busco es que cada vez que cambie uno de los textbox me calcule y no tener que esperar a tener todos rellenos

    ¿Esto quiere decir que usted puede calcular sin tener todos los datos?  ¿Cómo lo hace?  ¿Con valores por defecto para los campos que aún no se han provisto?  Como por ejemplo, si Text_Evapo1 aún está vacío, puedo calcular con un valor por defecto de, digamos 0.  ¿Es así?  Si así es, tiene que tener un IF por cada casilla de texto, y en vez de Exit Sub, asignar el valor por defecto para la variable Decimal correspondiente.  Como va a hacer un IF para cada casilla, puede implementar lógicas distintas en cada caso.  Las casillas totalmente requeridas tendrían un Exit Sub porque no es posible continuar sin sus valores, y las opcionales tendrían asignación de valores por defecto (o cálculos alternativos, etc.).


    Jose R. MCP
    Code Samples

    martes, 20 de marzo de 2018 22:50
    Moderador