none
Sin error ninguno con TextBox y error con ListBox RRS feed

  • Pregunta

  • Hola a todos,

    He creado dos proyectos exactamente iguales en Visual Basic 2008, uno que utiliza un TextBox para esvribir lo leido de un archivo y otro que utiliza un ListBox en vez del TextBox.
    El codigo fuente es exactamente el mismo tanto en uno como en otro.Lo unico que cambia es la linea donde escribo al TextBox o al ListBox, y sin embargo en el proyecto del ListBox, me da el famoso error
    ----------------------------------------------------
    Error   1   Option Strict On no permite restricciones del tipo 'System.ValueType' al tipo 'WriteListBoxDatosAr chivoRandom.Form1.R egistroParametros' al copiar de nuevo el valor del parámetro 'ByRef' 'Value' en el argumento correspondiente.   T:\Documents and Settings\xxxxxx\Mis documentos\Visual Studio 2008\Projects\WriteListBoxDatosArchivoRandom\Form1.vb   40   24   WriteListBoxDatosArchivoRandom
    -----------------------------------------------------
    cosa que en el de TextBox no da ningun error ni antes de la compilacion ni despues de ella.
    Este es el codigo que da error antes de compilar en lo que esta en negrita
    ___________________ ___________________ _________________
    Public Class Form1

        Public Structure RegistroParametros
            <VBFixedString(16)> Public Nombre_Parametro As String
            Public Valor_Parametro As Single
        End Structure

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

            Dim ContenidoRegistroPa rametros As RegistroParametros
            ContenidoRegistroPa rametros.Nombre_Par ametro = "                "
            ContenidoRegistroPa rametros.Valor_Para metro = 0

            FileOpen(1, "T:\Parametros.dat", OpenMode.Random, OpenAccess.ReadWrit e, OpenShare.Shared, Len(ContenidoRegistroPa rametros))
            Dim i As Integer
            Dim c As Char
            For i = 1 To 64
                c = CType(ChrW(i + 48), Char)
                ContenidoRegistroPa rametros.Nombre_Par ametro = c + c + c + c + c + c + c + c + c + c + c + c + c + c + c + c
                ContenidoRegistroPa rametros.Valor_Para metro = CType(i, Single)
                FilePut(1, ContenidoRegistroPa rametros, i)
            Next
            MessageBox.Show("Se creo el archivo")

            For i = 1 To 16
                FileGet(1, ContenidoRegistroPa rametros , i)
                ListBox1.Items.Add(ContenidoRegistroPa rametros.Nombre_Par ametro & "-" & ContenidoRegistroPa rametros.Valor_Para metro.ToString & ControlChars.CrLf)
            Next

            FileClose(1)

        End Sub
    End Class
    -------------------------------------------------------------------------------
    La linea que cambia en el proyecto del TextBox es la de ListBox.Items.Add(...) por esta otra
    TextBox1.AppendText(ContenidoRegistroPa rametros.Nombre_Par ametro & "-" & ContenidoRegistroPa rametros.Valor_Para metro.ToString & ControlChars.CrLf)

    Alguien entiende que en el proyecto TextBox no de error alguno y si lo de en el proyecto de ListBox y ENCIMA en la linea de lectura del archivo Huh

    Cualquier ayuda sera bienvenida
    Gracias anticipadas y saludos
    domingo, 6 de febrero de 2011 11:35

Respuestas

  • "javier234-" escribió:

    > Efectivamente como dices se resuelve el problema (de hecho te dire despues
    > lo que he hecho apoyandome en tu solucion), pero tanto en un proyecto como
    > en otro la opcion Strict esta en ON porque la tengo puesta en
    > Herramientas/Opciones/Proyectos y soluciones/Valores predeterminados de VB,
    > y obviamnete no tengo en el codigo que usa el TextBox Option Strict Off.
    > A saber que otra cosa puede ser.

    Si en el proyecto del control TextBox tienes activada la instrucción Option Strict, entiendo que tenías que obtener el mismo error en TIEMPO DE COMPILACIÓN.

    Pero ¡vamos! Que no le des más vueltas al asunto, porque el problema se debe a lo que comenté en el enlace que te indiqué, y la solución, la que yo ofrecí en su momento, de hecho, por tus comentarios se desprende que has solucionado el problema gracias a mi explicación, por tanto, si no es mucho pedir, te pedería que al menos marcaras mi respuesta como satisfactoria. ¿De acuerdo?

     


    Enrique Martínez
      [MS MVP - VB]

    • Marcado como respuesta javier234- lunes, 7 de febrero de 2011 14:42
    lunes, 7 de febrero de 2011 14:28
    Moderador

Todas las respuestas

  • "javier234-" escribió:

    > He creado dos proyectos exactamente iguales en Visual Basic 2008, uno
    > que utiliza un TextBox para esvribir lo leido de un archivo y otro que
    > utiliza un ListBox en vez del TextBox.
    > El codigo fuente es exactamente el mismo tanto en uno como en otro.Lo
    > unico que cambia es la linea donde escribo al TextBox o al ListBox, y
    > sin embargo en el proyecto del ListBox, me da el famoso error
    > ----------------------------------------------------
    > Error   1   Option Strict On no permite restricciones del tipo
    > 'System.ValueType' al tipo 'WriteListBoxDatosAr chivoRandom.Form1.RegistroParametros'
    > al copiar de nuevo el valor del parámetro 'ByRef' 'Value' en el argumento
    > correspondiente.   T:\Documents and Settings\xxxxxx\Mis documentos\Visual Studio 2008\Projects
    > \WriteListBoxDatosArchivoRandom\Form1.vb   40   24   WriteListBoxDatosArchivoRandom
    > -----------------------------------------------------
    > cosa que en el de TextBox no da ningun error ni antes de la compilacion
    > ni despues de ella.

    Hola:

    Lo que hay que ver es si en el proyecto donde utilizas el control TextBox tienes desactivada la instrucción «Option Strict», porque de tenerla activada -que es lo recomendado-, obtendrías el mismo error, ya que éste no se debe a que utilices un control ListBox, TextBox, Button, ComboBox o PictureBox; el problema se encuentra en el método «FileGet», al que le tienes que pasar un objeto System.ValueType, que en definitiva será una referencia de la variable declarada del tipo de dato de la estructura llamada RegistroParametros.

    Revisa la respuesta que en su día le ofrecí a un usuario del foro, con el mismo problema que estás teniendo tú ahora. Allí encontrarás la respuesta para evitar el error de compilación que estás teniendo:

    FileOpen OpenMode.Random... FileGet da error con Option Strict On

    Para que te vayas directamente al bulto, tienes que leer la última respuesta de todas las existentes en la conversación.

    Un saludo

     


    Enrique Martínez
      [MS MVP - VB]

    domingo, 6 de febrero de 2011 15:45
    Moderador
  • Gracias por responder Enrique, porque estaba perdido y no entendia nada.

    Te cuento:

    Efectivamente como dices se resuelve el problema (de hecho te dire despues lo que he hecho apoyandome en tu solucion), pero tanto en un proyecto como en otro la opcion Strict esta en ON porque la tengo puesta en Herramientas/Opciones/Proyectos y soluciones/Valores predeterminados de VB, y obviamnete no tengo en el codigo que usa el TextBox Option Strict Off.A saber que otra cosa puede ser.

    Bueno, soy un aprendiz de VB y he leido en Ayuda de mdsn acerca de System.ValueType y no entiendo por que defino una estructura (value) que deriva de la clase System.ValueType (cosa que segun he leido, todas las estructuras, como ContenidoRegistroParametros ,derivan y solo derivan de la clase System.ValueType),ya que en principio value es como ContenidoRegistroParametros.

    Para cambiar poco tal como lo tenia hecho lo he puesto asi:

            Dim value As System.ValueType = ContenidoRegistroParametros

            For i = 1 To 16
                FileGet(1, value, i)
                ContenidoRegistroParametros = CType(value, Form1.RegistroParametros)

                ListBox1.Items.Add(ContenidoRegistroParametros.Nombre_Parametro & "-" & ContenidoRegistroParametros.Valor_Parametro.ToString & ControlChars.CrLf)
            Next

    Nunca hubiese llegado a la solucion, NUNCA, al menos hoy por hoy.

    Saludos y gracias otra vez.

     

    domingo, 6 de febrero de 2011 23:23
  • "javier234-" escribió:

    > Efectivamente como dices se resuelve el problema (de hecho te dire despues
    > lo que he hecho apoyandome en tu solucion), pero tanto en un proyecto como
    > en otro la opcion Strict esta en ON porque la tengo puesta en
    > Herramientas/Opciones/Proyectos y soluciones/Valores predeterminados de VB,
    > y obviamnete no tengo en el codigo que usa el TextBox Option Strict Off.
    > A saber que otra cosa puede ser.

    Si en el proyecto del control TextBox tienes activada la instrucción Option Strict, entiendo que tenías que obtener el mismo error en TIEMPO DE COMPILACIÓN.

    Pero ¡vamos! Que no le des más vueltas al asunto, porque el problema se debe a lo que comenté en el enlace que te indiqué, y la solución, la que yo ofrecí en su momento, de hecho, por tus comentarios se desprende que has solucionado el problema gracias a mi explicación, por tanto, si no es mucho pedir, te pedería que al menos marcaras mi respuesta como satisfactoria. ¿De acuerdo?

     


    Enrique Martínez
      [MS MVP - VB]

    • Marcado como respuesta javier234- lunes, 7 de febrero de 2011 14:42
    lunes, 7 de febrero de 2011 14:28
    Moderador