Visual Basic .net 2005 Form

09/03/2007 - 18:10 por Diego ® M Romero | Informe spam
Hola
Como estan

Tengo una duda sobre la manera como de cargan y descargan los formularios en
Vb.net :

Anteriormente en VB6 utilizaba Show para cargar un formulario y Unload para
descargarlo, adicionalmente Set form1 =nothing

En .net cual es la manera correcta:

1. Form1.Show 'para cargar ?
Form1.Close 'para cerrar ?
Con Close se destruye el formulario o se debe llamar el metodo Dispose ?

No tengo muy claro lo de Dispose ?

2. Definir una variable e instanciar la clase de formulario ?


¿ Que metodos y eventos debo utilizar para asegurar que el formulario se
haya descargado de la memoria ?



________________________________
Diego M Romero
 

Leer las respuestas

#1 SoftJaén
10/03/2007 - 12:07 | Informe spam
"Diego ® M Romero" escribió:

Tengo una duda sobre la manera como de cargan y descargan los formularios
en Vb.net :

Anteriormente en VB6 utilizaba Show para cargar un formulario y Unload
para descargarlo, adicionalmente Set form1 =nothing




Hola, Diego:

En Visual Basic .net, los "formularios" son distintos a los formularios de
Visual Basic clásico. Lo único que tienen en común es que se utilizan como
contenedores de otros controles, pero en .net, un formulario es otra clase
más (la clase Form) de las existentes en el marco de trabajo.

En .net cual es la manera correcta:

1. Form1.Show 'para cargar ?
Form1.Close 'para cerrar ?



Esa sería la forma de mostrar un formulario de manera «no modal» en Visual
Basic 2005, y de cerrar el mismo, sin necesidad de crear una instancia
específica de una clase «Form» que tengamos en nuestro proyecto. Es lo mismo
que si ejecutas el método «Show» de Visual Basic clásico, sin especificarle
ningún valor al parámetro «Modal», ya que por defecto es «0 - vbModeless».

Digo que es la manera de mostrarlo en Visual Basic 2005, porque, salvo que
esté equivocado, quiero recordar que en las primeras versiones de .net no se
podía mostrar un formulario ejecutando simplemente el método «Show» de una
clase Form. Esto es un tema nuevo que han añadido en la versión 2005, y me
imagino que ha sido para hacerle la transición a .NET más fácil, a los
usuarios de Visual Basic clásico. ¡Vamos! ¡Digamos que es para que se
sientan como en su casa¡ :-)

Con Close se destruye el formulario o se debe llamar el metodo Dispose ?

No tengo muy claro lo de Dispose ?



Con el método «Close» sólo se cierra el formulario, desencadenándose una
serie de eventos: FormClosing, FormClosed y Dispose. Es en éste último
método donde se destruye por completo el formulario, liberándose igualmente
los recursos ADMINISTRADOS creados por el formulario

Por tanto, entiendo que no es sumamente necesario llamar directamente al
método Dispose, salvo que desees eliminar también en dicho método otros
recursos NO ADMINISTRADOS como por ejemplo, cerrar un archivo o liberar
cualquier objeto del sistema que hayas utilizado.

Pero tampoco es necesario liberar los recursos no administrados en el método
«Dispose», porque te puedes crear tu propio procedimiento para cerrar y
liberar los objetos creados, y llamar a éste procedimiento cuando lo estimes
conveniente, es decir, cuando creas que no los vas a necesitar más.

2. Definir una variable e instanciar la clase de formulario ?



A mi forma de entender, ésta sería la opción correcta de referenciar un
formulario, en lugar de utilizar métodos compartidos (Shared) de una clase
«Form» en concreto, que si bien no voy a discutir la utilidad que pueden
tener en un momento determinado éstos métodos compartidos, opino que
mantener una referencia a un objeto es un trabajo más acorde con un lenguaje
de programación orientado a objetos.


¿ Que metodos y eventos debo utilizar para asegurar que el formulario se
haya descargado de la memoria ?



La propiedad «IsDisposed» de un objeto Form, te indica si la instancia del
objeto ha sido eliminada o no. Si te devuelve «True», se entiende que la
referencia se ha destruido, es decir, que se ha ejecutado el método
«Dispose», por lo que no podrás hacer referencia a dicho objeto.

Pero una cosa es que se elimine la instancia al objeto, y otra cosa es que
desaparezca de la memoria, cosa ésta que sucederá cuando se ejecute una
recolección de elementos no utilizados, bien porque se ejecute
automáticamente en el momento que lo considere oportuno el sistema, o si
nosotros mismos la ejecutamos llamando al método «Collect» del objeto GC
(Garbage Collection):

' Ejecutamos una recolección de elementos no utilizados
GC.Collect
GC.WaitForPendingFinalizers()

En fín. Como verás, el tema es muy bonito. :-)

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

Preguntas similares