Autor Tema: Abrir copias de formulario  (Leído 435 veces)

Desconectado xavi

  • Administrador
  • Habitual
  • *****
  • Mensajes: 184
Abrir copias de formulario
« en: Abril 20, 2012, 06:38:18 pm »
Palabras clave: abrir, copia, instancia, formulario
Autor: Eduardo Olaz
Extraído de: La web del Búho

Pregunta
Se puede abrir el mismo formulario 2,3 o mas veces a la vez??
Como se hace???


Cita de: Eduardo Olaz
Un formulario es un objeto, con su módulo de clase asociado. Además es un tipo de objeto del que se puede crear múltiples instancias, es decir se pueden crear varios ejemplares de la clase correspondiente al formulario, y por ejemplo, añadirlas a una colección de formularios. Además, podemos variar las propiedades de cada ejemplar de la clase, por ejemplo el texto de la barra de títulos.

En un formulario he puesto el botón cmdNuevoFormulario y un botón llamado cmdVaciarColeccion.
Al apretar el botón cmdNuevoFormulario crea  una instanica del formulario FormularioMultiple, y lo añade a la colección colFormularios.
Cuando se aprieta el botón, descarga uno a uno los elementos de la colección formularios, con lo que se descargarán, excepto el último cargado porque todavía está instanciado por la variable frmFormulario. Para descargarlo hacemos:
    set frmFormulario = Nothing
Si cerramos el formulario de los botones, sin descargar la colección, también desaparecerán los fomularios al destruirse la colección de forma implícita.

Código: [Seleccionar]
Option Explicit

Dim colFormularios As New Collection
Dim frmFormulario As Form
Dim lngFormulario As Long

Private Sub cmdNuevoFormulario_Click()
    Set frmFormulario = New Form_FormularioMultiple
    lngFormulario = lngFormulario + 1
    colFormularios.Add frmFormulario
    With frmFormulario
        .Caption = " Formulario " & .Name & " nº " & Format(lngFormulario,"000")
        .Visible = True
    End With
End Sub

Private Sub cmdVaciarColeccion_Click()
    VaciarColeccion colFormularios
    ' Para que desaparezca el último formulario cargado
    ' ponemos frmFormulario a Nothing
    Set frmFormulario = Nothing
End Sub

Private Sub VaciarColeccion(Coleccion As Collection)
    Dim i As Long
    ' Vaciamos la colección de formularios
    With Coleccion
        For i = .Count To 1 Step -1
            .Remove (i)
        Next i
    End With
End Sub
« Última modificación: Septiembre 24, 2019, 06:00:56 pm por xavi »