Una manera fácil de utilizar el
patrón Singleton con formularios MDI
|
. |
En días anteriores estaba creando una aplicación en la cual requería crear una sola instancia de los formularios hijos de una MDI padre. Buscando en la documentación de Microsoft encontré este patrón llamado Singleton. Acá les muestro una sencilla implementación en formularios MDI para tener solamente una instancia abierta por formulario.
Lo primero que hay que hacer es modificar el constructor del formulario hijo, o sea, el formulario que queremos que solo tenga una instancia en la aplicación. Este constructor inicialmente aparece como publico (public). Lo modificaremos y lo haremos privado (private) para evitar llamados a este formulario.#Region " Windows Form Designer generated code " ' En esta constructora es que cambio la propiedad Public por la propiedad Private Private Sub New() MyBase.New()'This call is required by the Windows Form Designer. InitializeComponent()'Add any initialization after the InitializeComponent() callEnd SubLuego lo que haremos será crear una variable global en este mismo formulario hijo para que controle la instancia y la haremos shared para que pueda ser accesada desde el formulario padre.
'Variable pública. Private Shared ChildInstance As frmChild = Nothing'controla que sólo exista una instancia del formulario. Public Shared Function Instance() As frmChild If ChildInstance Is Nothing OrElse ChildInstance.IsDisposed = True Then ChildInstance = New frmChild End If ChildInstance.BringToFront() Return ChildInstance End Function
Finalmente crearemos una función shared que será la que finalmente controlara la creación o manejo de la instancia del formulario, logrando obtener solo un formulario abierto para este frmChild.
Ahora en el formulario padre escribiremos el llamado al formulario hijo para crear una instancia, o si ya esta creada, entonces pondrá el formulario hijo en frente para que lo podamos ver.dim frmChildInstance as frmChild = frmChildInstance.Instance frmChildInstance.MdiParent = me frmChildInstance.ShowEspero que les parezca fácil y es de mucha ayuda.
Fichero con el código de ejemplo: caja911_SingletonFormulariosMDI.zip - 9.9 KB