Despeja tus dudas de programación
0 votos

Estoy creando mi primera aplicación con dos formularios pero no entiendo muy bien que diferencia hay entre

FormDos.close()

y

FormDos.dispose()

Ambos parecen hacer lo mismo, ¿Cuál es la diferencia?, ¿Cuál debo usar?.

Gracias.

por en VB.NET
   

1 Respuesta

0 votos

Primero la teoría:
.Disposed() lo que hace es liberar los recursos del sistema que este utilizando el componente al que hace referencia, en tu caso FormDos.Disposed() lo que hace es quitar de la memoria todo el FormDos y su contenido (datos, variables, objetos, etc).
.Close() (en formularios) cierra el form y dispara una serie de eventos que pueden o no llegar a ejecutar el método .Disposed()

Esto se vuelve importante según como estes mostrando los formularios, de manera modal o no modal. (Para que quede claro, un formulario modal es por ejemplo un MsgBox(), estos al mostrarse detienen el código de donde han sido llamados hasta que el formulario se cierre.)

Si llamas a tu formulario de manera No Modal, usando por ejemplo FormDos.show() cuando cierras el formulario, ya sea con FormDos.Close() o con el botón de cerrar ventana se ejecutan los siguientes eventos:

  1. FormClosing. (Antes de que se cierre el formulario)
  2. FormClosed. (Justo después de cerrado)
  3. Disposed.

Como vez, .Dispose() esta dentro de la ruta del evento .Close() cuando el formulario es No Modal. Una vez ejecutado el método .Dispose, la información que el usuario haya puesto por ejemplo en un TextBox ya no estará disponible, esto es algo que tienes que tener en cuenta.

La cosa cambia cuando el formulario es mostrado de forma Modal. Dado que la idea de estos formularios es obligar al usuario a ingresar información, no tendría sentido que destruyamos esta misma antes de poder usarla ¿no?.

Si abres tu formulario de manera modal digamos FormDos.ShowDialog() al momento de cerrar el formulario los eventos que se disparan son:

  1. FormClosing.
  2. FormClosed.

Así tienes aún acceso a los datos del formulario, es más, si lo vuelves a abrir o mostrar, verás que los datos siguen ahí.

Si lo deseas o lo necesitas, puedes llamar al método FormDos.Dispose() luego de capturar/guardar los datos que necesitas así el formulario dejará de ocupar recursos (y los datos dejarán de existir). Si aquí vuelves a mostrar FormDos, todos los TextBox (por ejemplo) están con sus datos por defecto.

Espero este más o menos claro!


Pd: Hay un artículo escrito por Enrique Martínez que lo explica con mucha más profundidad aquí.


enlightenedSi esta respuesta te ayudo, no te olvides de marcarla como correcta smiley

por (8.6k puntos)

Bienvenido a la sección de Desarrolladores (developers) de Pregunten.Net.

Aquí puedes despejar tus dudas básicas sobre relacionadas a diversos lenguajes de programación

Categorías

44 preguntas
51 respuestas
25 comentarios
3,251 usuarios