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
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,
For i As Integer = 0 To 10
ListBox1.Items.Add( i )
Next
Ahora, en tú código los estas ingresando, intentad ponerlo así,
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.
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
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/ (http://foro.elhacker.net/net-b62.0/)
Suerte
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
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
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