Sin error ninguno con TextBox y errror con ListBox

Iniciado por javier234-, 5 Febrero 2011, 20:16 PM

0 Miembros y 1 Visitante están viendo este tema.

javier234-

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 'WriteListBoxDatosArchivoRandom.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.
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 ContenidoRegistroParametros As RegistroParametros
        ContenidoRegistroParametros.Nombre_Parametro = "                "
        ContenidoRegistroParametros.Valor_Parametro = 0

        FileOpen(1, "T:\Parametros.dat", OpenMode.Random, OpenAccess.ReadWrite, OpenShare.Shared, Len(ContenidoRegistroParametros))
        Dim i As Integer
        Dim c As Char
        For i = 1 To 64
            c = CType(ChrW(i + 48), Char)
            ContenidoRegistroParametros.Nombre_Parametro = c + c + c + c + c + c + c + c + c + c + c + c + c + c + c + c
            ContenidoRegistroParametros.Valor_Parametro = CType(i, Single)
            FilePut(1, ContenidoRegistroParametros, i)
        Next
        MessageBox.Show("Se creo el archivo")

        For i = 1 To 16
            FileGet(1, ContenidoRegistroParametros, i)
            ListBox1.Items.Add(ContenidoRegistroParametros.Nombre_Parametro & "-" & ContenidoRegistroParametros.Valor_Parametro.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(ContenidoRegistroParametros.Nombre_Parametro & "-" & ContenidoRegistroParametros.Valor_Parametro.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 ???

Cualquier ayuda sera bienvenida
Gracias anticipadas y saludos


Shell Root

Bueno, hace mucho rato que no codeo algo en .NET, pero lo que puedo recordar...

Los saltos de lines los genera automáticamente el objeto ListBox, es decir,
Código (vbnet) [Seleccionar]
For i As Integer = 0 To 10
  ListBox1.Items.Add( i )
Next


Ahora, en tú código los estas ingresando, intentad ponerlo así,
Código (vbnet) [Seleccionar]
        For i = 1 To 16
            FileGet(1, ContenidoRegistroParametros, i)
            ListBox1.Items.Add(ContenidoRegistroParametros.Nombre_Parametro & "-" & ContenidoRegistroParametros.Valor_Parametro.ToString)
        Next


Recuerda, que este objeto tiene 2 opciones:
  1. Lo que se encuentra encima, es decir, el texto.
  2. El que se encuentra por debajo, es decir, el valor.

Así que puedes eliminar la concatenación y consultar como se puede agregar el valor por debajo.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

javier234-

Gracias Shell Root  por responder,

Pero el error no lo da en la linea de ListBox1.Items.Add(....) sino en la linea anterior al leer el archivo (FileGet(........)), cosa que no entiendo por que no da el mismo error en el otro proyecto en el que utilizo un TextBox en vez de un ListBox.
Es mas, te diré que si quito completamente la linea ListBox1.Items.Add (....), me sigue dando el mismo error.Increible pero cierto.
Tanto en uno como en otro proyecto la opcion OptionStrict esta en On.
Al margen de que en los ListBox se genere automaticamente el salto de linea.

Gracias
Saludos

agus0

Fijate el Problema esta en Que Estas Tratando de Copiar o Pasar una Variable a otra que no es del mismo tipo... (Creo igual no lo lei el code) Mas allá de eso.. Esto es VISUAL BASIC 6.0.

Lo mejor seria que postes tu Duda en :NET: http://foro.elhacker.net/net-b62.0/

Suerte

javier234-

Gracias agus0  por responder,

No  sabia que este post era solo para Visual Basic 6.0 o menor.Por eso lo puse aqui..
Como se mueve al .NET ?
De cualquier manera te digo que lo curioso es que el error lo da no en una linea nueva, sino en una linea que estaba exactamente igual puesta en el proyecto con TextBox y alli no daba error.Realmente es incomprensible.
Si sabes como mover el post a .NET dimelo por favor.
Saludos

raul338

La verdad creo que ese codigo viene de un proyecto de vb6 convertido a .net

Deberias hacerlo deneuvo pero utilizando las clases de .net tales como streams, te facilitaran mucho la vida

javier234-

Hola raul338, gracias por responder,

La verdad es que me esta dando bastantes problemas el tema, pero necesito operar con archivos de acceso directo y los unicos ejemplos que he encontrado en la red, unos no funcionan (debian ser para VB6) y otros como el que pongo da errores extraños,una vez si y otra no.No he encontrado ni se donde encontrar ejemplos o documentos para este tipo de archivos en .NET, ya que el MSDN es un poco infumable y no facil de entender.
Si sabes de algun sitio donde poder mirar te lo agradeceria.
Saludos