"El misterio de la variable indx" jaja

Iniciado por $Edu$, 23 Octubre 2011, 15:13 PM

0 Miembros y 3 Visitantes están viendo este tema.

Elemental Code

declaras la variable con DIM y en el form en cuestion?
Si la declaras como GLOBAL o en algun modulo o form va a quedar guardada

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas

$Edu$

Esta declarada como Dim indx as integer en el form, en general, teoricamente al descargarse el form esa variable se anularia pero no lo hace :/, seguramente es por codigo que tendre en otro lado, pero buscando en Buscar.. no encontre que haga una modificacion a esa variable desde otro lado ni nada :/

seba123neo

no me da ganas de agregar equipos  :xD, deberias hacer una base de datos como te dije asi ya te va guardando lo que cargas.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

raul338

Pregunta, seteas la variable indx antes de mostrar el formulario?

Cita de: seba123neo en 26 Octubre 2011, 03:05 AM
no me da ganas de agregar equipos  :xD, deberias hacer una base de datos como te dije asi ya te va guardando lo que cargas.
:xD

BlackZeroX

Cita de: seba123neo en 26 Octubre 2011, 03:05 AM
no me da ganas de agregar equipos  :xD, deberias hacer una base de datos como te dije asi ya te va guardando lo que cargas.

Pienso lo mismo.

Ya me baje el proyecto (Hace ya tiempo) pero me da un poco de pereza visual... asi que solo te dejo una SOLUCION PARA RASTREAR Y DEPURAR la llamada al seteo de valor a indx para ver detectar el "misterio" de la variable...

Código (vb) [Seleccionar]

Dim indx as integer


por:

Código (vb) [Seleccionar]

private mIndexBlackZeroX as integer ' //  puede ser lo que quieras solo le dejo el nombre asi por que es una SOLUCION PARA RASTREAR la linea que le setea el valor y asi coprregirlo.


Despues para que no edites nada del codigo y poder poner los BreakPoint JUSTOS agregas esta propiedad:

Código (vb) [Seleccionar]


public property let indx(byval lVal as integer)
   mIndexBlackZeroX = lval ' // Aqui pones el BreakPoint o agregar un Debug.print para Depurar...
end property

public property get indx() as integer
   indx = mIndexBlackZeroX
end property



Te dejo esta solucion para que lo hagas... jejeje.

Dulces Lunas!¡.
The Dark Shadow is my passion.

$Edu$

Jeje se que esta feo agregar todos los datos para llegar ahi pero bueno, yo los agrego en unos segundos de tantas veces que lo he hecho xD

No me funciono eso BackZeroX, igual gracias, quedara como uno de esos misterios sin resolver jajajaja

rob1104

Ya entendí el problema, la verdad si es algo raro que visual basic no destruya la variable al descargar el form =S

Compruebenlo de esta forma:


  • En un proyecto agregar dos form (form1 y form2)
  • Agregar un command a cada uno

Usar el sig. codigo en form1
Código (vb) [Seleccionar]
Option Explicit

Private Sub Command1_Click()
    Form2.Show
End Sub


Y el sig codigo en form2
Código (vb) [Seleccionar]
Option Explicit
Dim i As Integer

Private Sub Command1_Click()
    Unload Me
End Sub

Private Sub Form_Load()
    MsgBox i
    i = i + 1
    MsgBox i
End Sub


Al cerrar el form2 aun con el unload me la variable i conserva su valor. Obviamente esto se puede solucionar de muchas formas, y $Edu$ el método que utilizas de inicializar la variable 0 es muy valido, de hecho se recomienda siempre inicializar la variables para evitar este tipo de cosas. Otro detalle curioso es qui si la variable es declarada dentro de form_load() si se destruye su valor. En fin, visual basic y sus misterios :P


Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

$Edu$

Y yo haciendoles poner miles de cosas para llegar al bug jajajaja, grande rob!

A ver si alguien descubre el porque :P

burbu_1

buenas, no se si tendrá que ver.....pero he encontrado esto sobre la "variable global oculta"

CitarLiberación completa de memoria y recursos

La única manera de liberar toda la memoria y los recursos es descargar el formulario y establecer todas sus referencias a Nothing. La referencia que más se suele pasar por alto al realizar esta tarea es la variable global oculta mencionada anteriormente. Si en algún momento ha hecho referencia al formulario por su nombre de clase (como aparece en la propiedad Name de la ventana Propiedades), ha utilizado la variable global oculta. Para liberar memoria del formulario, tiene que establecer esta variable a Nothing. Por ejemplo:

Set Form1 = Nothing

Citarhttp://www.recursosvisualbasic.com.ar/htm/tutoriales/c1-creacion-de-clases.htm#duracion-formularios

es la clase de problema que te da ganas de tirar el pc por la ventana  :laugh: :laugh: :laugh:

$Edu$

Entonces obligados estamos a poner en el form_unload() set form = nothing ? que feo eso de vb6.. jaja

En .net por ejemplo existe el recolector de basura que se encarga de eso, por eso sera que no me paso nunca en .net?