Pages

Friday, May 5, 2006

Manejo de MDI childrens en VB.NET (esp)

El manejo de ventanas ha cambiado mucho desde la versión 6.0 de visual basic, en ese entonces se tenia una referencia directa a las ventanas como objetos instanciados, pero en .NEt esto ha cambiado y aunque algunos no estén de acuerdo yo creo que para mejor.
Sin embargo hay maneras de obtener una funcionalidad similar en el manejo de ventanas, en esta ocasión veremos estos principios orientados al manejo de formularios MDI.
Como sabemos las aplicaciones MDI consisten de un formulario Padre dentro el cual se despliegan las demás ventanas llamadas HIjas.
Un problema común con el que nos encontramos a veces con formularios MDI es el no poder saber si los formularios hijos ya se crearon o no, y en el caso de estar creados como pasarles un mensaje o hacer referencia a objetos dentro de estos. Además esta solución viene útil cuando se necesita que un formulario hijo se comunique con otro formulario hijo. Y para controlar que no haya formularios hijos repetidos si es que eso deseamos. Bueno la manera de implementación es la siguiente:

Primer Paso - Modulo compartido:

Como primer paso debe crear un modulo en el cual declare los objetos de los formularios a usar, por ejemplo:

Module ventanas

    Public abmacactivo As abmacactivo
    Public abmacaseguradora As abmacaseguradora
    Public abmacnumeracion As abmacnumeracion
    Public abmacseguro As abmacseguro
End Module 
 
En esta caso tendriamos cuatro ventanas que deseamos controlar.


Segundo Paso - Afinar las ventanas Hijas:

Para poder controlar si los forms están creados o no es necesario que cuando sean destruidos los objetos su instancia pase a ser nothing, esto lo logramos asignando nothing al objeto formulario en su evento Closing. El siguiente es un código de ejemplo del formulario abmactivo.

Private Sub abmacactivo_Closing(ByVal sender As Object, _
 ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

    ventanas.abmacactivo.Dispose()
    ventanas.abmacactivo = Nothing

End Sub

Tercer Paso - Como abrir los formularios:

Cuando se desee abrir uno de estos formularios se lo debe hacer tomando en cuenta el objeto declarado en el modulo de ventanas, el siguiente ejemplo es para abrir el formulario abmacactivo desde el formulario principal:
If ventanas.abmacactivo Is Nothing Then
    ventanas.abmacactivo = New abmacactivo
    ventanas.abmacactivo.MdiParent = Me
End If
ventanas.abmacactivo.Show()
ventanas.abmacactivo.BringToFront ()

Aplicaciones - Para que sirve?:

Utilizando esta técnica logramos: - Que solo se cree una instancia de cada formulario controlado. Si es que el formulario ha sido creado anteriormente solo se traerá al frente. - Podemos referirnos directamente a cualquier formulario o sus objetos públicos, desde el formulario Principal, pero también desde otro formulario hijo, utilizando la forma siguiente:
Referencia directa a el formulario abmacactivo:

ventanas.abmactivo

Referencia directa a un entero declarado publico en el formulario abmacactivo:

ventanas.abmactivo.NroCompartido

Eso me permite tener comunicación total con mis formularios hijos, Y entre formulario hijos también. 

Y eso, amigo mío, ¡es todo!

No comments:

Post a Comment