Una manera fácil de utilizar el patrón Singleton con formularios MDI

Fecha: 30 de junio de 2004
Autor: Camilo Andrés Jaramillo Álvarez - [email protected]

 

.

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() call
     End Sub

Luego 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


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.


    '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


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.Show

Espero que les parezca fácil y es de mucha ayuda.


ir al índice

Fichero con el código de ejemplo: caja911_SingletonFormulariosMDI.zip - 9.9 KB

Índice de la sección dedicada a punto NET (en el Guille)