13 octubre 2006

Errores de programación (V)

Este error quizá no sea tal, sino un problema de interpretación del funcionamiento del compilador, de todos modos, al ser un comportamiento curioso, voy a hablar de él.

Supongamos el siguiente fragmento de código:

' OpcListMin es una variable global, declarada en un módulo separado, que el formulario
' ListFrm necesita para, al cargarse, mostrar una cosa u otra.
OpcListMin = 2

' Cerramos para asegurarnos, por las bravas, de que ese listado no está abierto. La variable
' MiFormList es global al formulario MDI de la aplicación.
MiFormList.Close()

' Y lo volvemos a abrir, tan inocentemente
MiFormList = New ListFrm
MiFormList.MdiParent = Me
MiFormList.Show()


Pues bien, si hacemos esto, el valor de OpcListMin se pierde, esto es, la variable se queda a cero sin hacer caso a la asignación previa al cierre de MiFormList. No teníamos ni idea de a qué se debía este comportamiento hasta que se me ocurrió, por ver qué pasaba, invertir dos líneas, o sea:

' Cerramos para asegurarnos, por las bravas, de que ese listado no está abierto. La variable
' MiFormList es global al formulario MDI de la aplicación.
MiFormList.Close()

' OpcListMin es una variable global, declarada en un módulo separado, que el formulario
' ListFrm necesita para, al cargarse, mostrar una cosa u otra.
OpcListMin = 2

' Y lo volvemos a abrir, ya no tan inocentemente

MiFormList = New ListFrm
MiFormList.MdiParent = Me
MiFormList.Show()

Hecho de la segunda forma sí funciona.

Desde un punto de vista lógico, carece de sentido. ¿Por qué una variable global a una aplicación, definida en un módulo aparte, se vuelve cero por cerrar un formulario localmente y volverlo a abrir?

Curioso, ¿no?

1 comentario:

Anónimo dijo...

¡¡Hola!!:

He vuelto. Por fin he publicado mi segundo cuento, que ya iba siendo hora de hacerlo jejeje.

Siento haber tardado tanto en dejarte un comentario, pero es que entre las prácticas y las clases, apenas me queda tiempo libre para escribir.

Hoy he podido terminar el cuento gracias a que hoy no he salido de casa, puesto que me están saliendo las muelas del juicio, y tengo la cara muy muy hinchada.

Espero que el nuevo cuento os guste. Está basado en el accidente de tráfico y la forma de relatarlo de mi novio.

Esperemos que dentro de poco tenga un tercer cuento, para compensaros la tardanza por el segundo. He tardado demasiado en escribirlo, y debo compensaroslo.

Muchos besos y gracias por tus visitas. Se agradecen muchísimo.