none
La conversion de la cadena "" en el tipo 'integer' no es válida

    Pregunta

  • Hola a todos, estoy empezando a programar en vb.net y me encontre con este problema en el form 4...

    Esto es lo que me sale en el error:

    ----------------------------------------------------------------

    ************** Texto de la excepción **************
    System.InvalidCastException: La conversión de la cadena "" en el tipo 'Integer' no es válida. ---> System.FormatException: La cadena de entrada no tiene el formato correcto.
       en Microsoft.VisualBasic.CompilerServices.Conversions.ParseDouble(String Value, NumberFormatInfo NumberFormat)
       en Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
       --- Fin del seguimiento de la pila de la excepción interna ---
       en Microsoft.VisualBasic.CompilerServices.Conversions.ToInteger(String Value)
       en Contact_Lens_Tracker.Form4.Form4_Load(Object sender, EventArgs e) en C:\Users\Agustin\documents\visual studio 2010\Projects\Contact Lens Tracker\Contact Lens Tracker\Form4.vb:línea 29
       en System.Windows.Forms.Form.OnLoad(EventArgs e)
       en System.Windows.Forms.Form.OnCreateControl()
       en System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
       en System.Windows.Forms.Control.CreateControl()
       en System.Windows.Forms.Control.WmShowWindow(Message& m)
       en System.Windows.Forms.Control.WndProc(Message& m)
       en System.Windows.Forms.ScrollableControl.WndProc(Message& m)
       en System.Windows.Forms.Form.WmShowWindow(Message& m)
       en System.Windows.Forms.Form.WndProc(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       en System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       en System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ------------------------------------------------------------------

    Y este el codigo de la form4:

    ------------------------------------------------------------------

    Public Class Form4

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            My.Settings.mail = TextBox1.Text
            My.Settings.Save()
            If CheckBox1.Checked = True Then
                My.Settings.config2 = "1"
                My.Settings.Save()
            Else
                CheckBox1.Checked = False
                My.Settings.config2 = "0"
                My.Settings.Save()
            End If

            My.Settings.check = CheckBox1.CheckState
            My.Settings.Save()
            Form2.Show()
            Me.Close()

        End Sub

        Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
      

        End Sub

        Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            TextBox1.Text = My.Settings.mail
            CheckBox1.CheckState = My.Settings.check
        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Form2.Show()
            Me.Close()
        End Sub

     

        Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter

        End Sub
    End Class

    --------------------------------------------------------------

    No se en donde esta el problema ya que cuando pruebo la aplicacion al querer abrir esa form me tira el error... Gracias!

    miércoles, 09 de noviembre de 2011 2:24

Respuestas

  • "Agustin-" escribió:

    > me encontre con este problema en el form 4...
    >
    > Esto es lo que me sale en el error:
    >
    > en Microsoft.VisualBasic.CompilerServices.
    > Conversions.ToInteger(String Value)
    >   en Contact_Lens_Tracker.Form4.
    > Form4_Load(Object sender, EventArgs e)
    > en C:\Users\Agustin\documents\visual studio 2010\
    > Projects\Contact Lens Tracker\Contact Lens Tracker\
    > Form4.vb:línea 29
    > en System.Windows.Forms.Form.OnLoad(EventArgs e)
    >

    Hola, Agustín:

    Si tuvieras activada la instrucción 'Option Strict', no necesitarías ejecutar la aplicación para obtener la excepción que nos estás comentando, porque la obtendrías directamente en tiempo de diseño.

    Según la descripción del error, parece ser que se produce en el evento Load de Form4.

    >   Private Sub Form4_Load(...) Handles MyBase.Load
    >        TextBox1.Text = My.Settings.mail
    >        CheckBox1.CheckState = My.Settings.check
    >    End Sub

    Observando el código que ejecutas en dicho evento, lo único que puedo pensar es que la propiedad 'check' no se pueda convertir a un valor CheckState.

    ¿Qué valor tiene la propiedad 'My.Settings.check'?

    Un saludo


    NOTA: si esta respuesta te ha resultado útil, recuerda marcarla como satisfactoria.

    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    • Marcado como respuesta Agustin- miércoles, 09 de noviembre de 2011 23:11
    miércoles, 09 de noviembre de 2011 7:42
    Moderador

Todas las respuestas

  • InvalidCastException (Miembros)

    Excepción que se produce para una conversión de tipos o una conversión explícita de otra naturaleza que no es válida.

    Esta asignando el valor de un string a un objecto de tipo entero, verificate esta linea

    Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
             TextBox1.Text = DirectCast(My.Settings.mail, String)
             CheckBox1.CheckState = My.Settings.check
         End Sub
     

     



     


    Angel R. Jimenez G.
    Software Development
    Santo Domingo
    Republica Dominicana
    My Blog
    miércoles, 09 de noviembre de 2011 2:39
  • hola

    has valudado que en esta linea

    CheckBox1.CheckState = My.Settings.check

    el tipo de dato devuelto por My.Settings.check sea un valor numerico ?

    quizas debas hacer

     

    recuerda habilitar el Option Strict en tu codigo para que al momento de compilar se marque estos problemas de tipos  de datos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 09 de noviembre de 2011 3:02
  • te propongo algo para no andar dando vueltas agraga el:

     

       Try
        ... (instrucciones)
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

     

    Con esto veremos donde sta el error y de paso depurarlo con el F8 y asi ir paso a paso para ver en que momento "Cacha" un error y te daras cuenta exactamente donde esta el error

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Try       
     My.Settings.mail = TextBox1.Text
            My.Settings.Save()
            If CheckBox1.Checked = True Then
                My.Settings.config2 = "1"
                My.Settings.Save()
            Else
                CheckBox1.Checked = False
                My.Settings.config2 = "0"
                My.Settings.Save()
            End If
    
            My.Settings.check = CheckBox1.CheckState
            My.Settings.Save()
            Form2.Show()
            Me.Close()
    Catch ex As Exception
    MsgBox(ex.Message)
        End Try
    
        End Sub


     


    Saludos,
    Recuerda que si las respuestas te ayudan a resolver tus problemas no olvides marcarla como respuesta, ya que otros usuarios pueden tener el mismo problema.
    J. Miguel
    • Editado J_Miguel miércoles, 09 de noviembre de 2011 4:38 Ejemplo Agrgado
    miércoles, 09 de noviembre de 2011 4:33
  • Hola Agustin

    De que manera has definido a My.Settings.config2??

    Pues veo que estas pasando una cadena de texto (string) y de pronto tu lo has definido como un entero(int) o un double.

    Si estoy en lo correcto sería quitar los "" al 1 y al 0 quedando de esta forma:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            My.Settings.mail = TextBox1.Text
            My.Settings.Save()
            If CheckBox1.Checked = True Then
                My.Settings.config2 = 1
                My.Settings.Save()
            Else
                CheckBox1.Checked = False
                My.Settings.config2 = 0
                My.Settings.Save()
            End If
    
            My.Settings.check = CheckBox1.CheckState
            My.Settings.Save()
            Form2.Show()
            Me.Close()
    
        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
    miércoles, 09 de noviembre de 2011 5:34
  • "Agustin-" escribió:

    > me encontre con este problema en el form 4...
    >
    > Esto es lo que me sale en el error:
    >
    > en Microsoft.VisualBasic.CompilerServices.
    > Conversions.ToInteger(String Value)
    >   en Contact_Lens_Tracker.Form4.
    > Form4_Load(Object sender, EventArgs e)
    > en C:\Users\Agustin\documents\visual studio 2010\
    > Projects\Contact Lens Tracker\Contact Lens Tracker\
    > Form4.vb:línea 29
    > en System.Windows.Forms.Form.OnLoad(EventArgs e)
    >

    Hola, Agustín:

    Si tuvieras activada la instrucción 'Option Strict', no necesitarías ejecutar la aplicación para obtener la excepción que nos estás comentando, porque la obtendrías directamente en tiempo de diseño.

    Según la descripción del error, parece ser que se produce en el evento Load de Form4.

    >   Private Sub Form4_Load(...) Handles MyBase.Load
    >        TextBox1.Text = My.Settings.mail
    >        CheckBox1.CheckState = My.Settings.check
    >    End Sub

    Observando el código que ejecutas en dicho evento, lo único que puedo pensar es que la propiedad 'check' no se pueda convertir a un valor CheckState.

    ¿Qué valor tiene la propiedad 'My.Settings.check'?

    Un saludo


    NOTA: si esta respuesta te ha resultado útil, recuerda marcarla como satisfactoria.

    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    • Marcado como respuesta Agustin- miércoles, 09 de noviembre de 2011 23:11
    miércoles, 09 de noviembre de 2011 7:42
    Moderador
  • Hola Enrique

    Mira esta parte del código:

     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            My.Settings.mail = TextBox1.Text
            My.Settings.Save()
            If CheckBox1.Checked = True Then
                My.Settings.config2 = "1"
                My.Settings.Save()
            Else
                CheckBox1.Checked = False
                My.Settings.config2 = "0"
                My.Settings.Save()
            End If

            My.Settings.check = CheckBox1.CheckState
            My.Settings.Save()
            Form2.Show()
            Me.Close()

        End Sub

    De ahí es donde sale el valor. Por eso es que yo opino que el error está en convertir un string a int en la propiedad My.Settings.config2

    Saludos


    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
    miércoles, 09 de noviembre de 2011 17:35
  • "Antonio Lobo" escribió:

    > Mira esta parte del código:
    >
    > Private Sub Button1_Click(...) Handles Button1.Click
    >
    >        My.Settings.check = CheckBox1.CheckState
    >
    >    End Sub
    >
    > De ahí es donde sale el valor. Por eso es que yo opino
    > que el error está en convertir un string a int en la
    > propiedad My.Settings.config2

    Hola, Antonio:

    Tal y como le he indicado al usuario, entiendo que el error se produce en el evento Load del formulario llamado Form4, no en el evento Click del control llamado Button1.

    Lo digo por la traza del error que el usuario ha publicado:

    > en Microsoft.VisualBasic.CompilerServices.
     > Conversions.ToInteger(String Value)
     >   en Contact_Lens_Tracker.Form4.
     > Form4_Load(Object sender, EventArgs e)
     > en C:\Users\Agustin\documents\visual studio 2010\
     > Projects\Contact Lens Tracker\Contact Lens Tracker\
     > Form4.vb:línea 29
     > en System.Windows.Forms.Form.OnLoad(EventArgs e)

    Un saludo

     

     


    NOTA: si esta respuesta te ha resultado útil, recuerda marcarla como satisfactoria.

    Enrique Martínez
      [MS MVP - VB]

    Si usas Visual Basic .NET y deseas ser productivo y feliz, activa la instrucción Option Strict.

    miércoles, 09 de noviembre de 2011 17:56
    Moderador
  • Hola

    Ombe Enrique es que no lo quiero molestar a usted solo comentaba que el esta guardando un valor de tipo CheckState en esa propiedad cuando presiona el click en el botón.

    Aunque ahora me doy cuenta que si esta es la primera vez que inicia el programa y no se tiene un valor asociado a la propiedad My.Settings.check lo mas seguro es que obtendrá un error aunque no específicamente éste que el usuario comenta; pues según la MSDN mandaría una excepción del tipo InvalidEnumArgumentException.

    Debería poner un breakpoint a ver en cuál de las instrucciones es que obtiene el error. 

    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
    miércoles, 09 de noviembre de 2011 18:15
  • yo tambien pensaba lo mismo, pero analizando el stacktrace como comente al principio que el problema seguro esta en esta linea

    CheckBox1.CheckState = My.Settings.check

     

    aunque no se descarta que luego cuando esto se solucione no se produzcan problemas donde estas marcando

    es que seguramente aun no llego al button1 por eso no se manifesto el fallo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 09 de noviembre de 2011 20:13
  • Gracias! Active el Option Strict y vi que el problema estaba en:

    My.Settings.check = CheckBox1.CheckState

    y en

    CheckBox1.CheckState = My.Settings.check

    entonce quedo así y funciona:

    ----------------------------------------------------------

    Option Strict On

    Public Class Form4

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            My.Settings.mail = TextBox1.Text

            My.Settings.Save()

            If CheckBox1.Checked = True Then

                My.Settings.config2 = "1"

                My.Settings.Save()

            Else

                CheckBox1.Checked = False

                My.Settings.config2 = "0"

                My.Settings.Save()

            End If

     

     

            My.Settings.Save()

            Form2.Show()

            Me.Close()

     

        End Sub

     

        Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged

     

     

        End Sub

     

        Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

            TextBox1.Text = My.Settings.mail

            If My.Settings.config2 = "1" Then

                CheckBox1.CheckState = CType(1, CheckState)

            Else

                CheckBox1.CheckState = CType(0, CheckState)

            End If

        End Sub

     

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

            Form2.Show()

            Me.Close()

        End Sub

     

     

     

        Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter

     

        End Sub

    End Class

     

    -----------------------------------

    Gracias por la ayuda a todos!!!

    miércoles, 09 de noviembre de 2011 23:14
  • es justo lo que marque desde un principio la linea 

    My.Settings.check = CheckBox1.CheckState 

    y el option strict, pero bueno parece que ni leiste la respuesta que proporcione no te ayudo

     

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    miércoles, 09 de noviembre de 2011 23:51