La Web del Programador: Comunidad de Programadores
 
    Pregunta:  50684 - INSTANCIAR SOLO UNA VEZ UN FORMULARIO HIJO
Autor:  Nicolas Tenca
Hola. Como puedo hacer para que un formulario hijo sea llamado solo una vez desde un formulario padre dentro de una aplicacion MDI. Averigue una forma pero lo tengo que hacer en cada formulario hijo, estaria bueno que esto no sea asi.
Muchas gracias por su ayuda!

  Respuesta:  Jose ramirez
'l asiguiente linea por si estas dentro de un mdi
My.Forms.frmckColor.MdiParent = Me

My.Forms.frmckColor.Show()
My.Forms.frmckColor.Focus()

donde frmckColor es el nombre de tu formulario

  Respuesta:  Nicolas Tenca
Ya encontre la solucion. Es sencilla y creo que efectiva a lo que yo ando buscando:

En el formulario padre cuando hago la llamada al hijo puse este codigo

Dim agregar As New FrmAgregarSocios
If Me.MdiChildren.Length <> 0 Then
For x As Integer = 0 To Me.MdiChildren.Length - 1
If Me.MdiChildren(x).Text = agregar.Text Then
Me.MdiChildren(x).Focus()
agregar.Dispose()
Exit Sub
End If
Next
End If
agregar.MdiParent = Me
agregar.Show()

Utilizo la coleccion mdichildren que acumula los formularios hijos instanciados. La comparacion la hice con la propiedad .text pero puede ser cualquier otra.

  Respuesta:  Javier Suero
Hola Nicolás,

creo que veo la solución, a ver si soy capaz de explicarme.

Es la técnica singleton pero en colección

Crea un colección de formularios static(shared).

Si te piden un formulario del tipo hijo concreto compruebas que no lo tienes en la colección, si lo tienes devuelves ese, si no lo creas, lo incluyes en la colección y lo devuelves.

Acuérdate de que cuando el formulario hijo concreto se cierre tiene que quitarse de la colección estática del padre.

Algo así.

Un saludo, Javier.