Administrar múltiples instancias de un formulario

Puede tener activas varias instancias de una definición de clase al mismo tiempo. Por ejemplo, puede diseñar un formulario de pedidos, pero tener varios pedidos abiertos en su aplicación. Cada pedido utiliza la misma definición de formulario, pero se muestra y manipula individualmente.

Si dispone de múltiples instancias de un formulario, los puntos clave que deberá tener en cuenta son los siguientes:

  • Cree una propiedad de matriz en el formulario de inicio para almacenar las variables de objeto asociadas con cada instancia del formulario de múltiples instancias. El modo más sencillo de hacer un seguimiento de las variables de instancia cuando no se sabe con antelación cuántas va a tener consiste en utilizar una matriz.
  • ,Establezca la propiedad DataSession en 2 – Sesión privada de datos para el formulario que va a tener varias instancias. Una sesión privada de datos proporciona un conjunto independiente de áreas de trabajo para cada instancia del formulario de forma que las tablas seleccionadas y las posiciones de puntero de registro sean todas independientes.

El ejemplo siguiente proporciona código que muestra cómo se crean múltiples instancias de un formulario. Para no hacerlo demasiado extenso, este código no está optimizado; está pensado únicamente para presentar los conceptos.

El formulario siguiente inicia múltiples instancias:

Valores de la propiedad para Launch.scx

Objeto Propiedad Valor
frmLaunch aForms[1]
" "

Código de evento para Launch.scx

Objeto Evento Código
cmdQuit Click
RELEASE THISFORM
cmdLaunch Click
nInstance = ALEN(THISFORM.aForms)
DO FORM Multi ;
  NAME THISFORM.aForms[nInstance] ;
  LINKED
DIMENSION ;
  THISFORM.aForms[nInstance + 1]

Para ajustar el código de este ejemplo, podría administrar la matriz de objetos de formulario de modo que se cerraran los elementos vacíos de la matriz reutilizados como formularios y se abrieran nuevos formularios, en lugar de redimensionar siempre la matriz y aumentar en uno el número de elementos.

El formulario que puede tener múltiples instancias es Multi.scx. El entorno de datos para este formulario contiene la tabla Employee.

Múltiples instancias de Multi.scx

Valores de la propiedad para Multi.scx

Objeto Propiedad Valor
txtFirstname ControlSource
Employee.first_name
txtLastName ControlSource
Employee.last_name
frmMulti DataSession 2 - Sesión privada de datos

Al elegir Iniciar formulario en el formulario Launch, se crea una instancia del formulario Multi. Al cerrar el formulario Launch se libera la matriz de propiedades aForms y se destruyen todas las instancias de Multi.

Visual FoxPro proporciona algunas funciones y propiedades que le ayudan a administrar múltiples instancias de objetos. Para obtener más información, consulte AINSTANCE( ), AUSED( ) y DataSessionID.

Vea también

Guardar un formulario como HTML | Establecer el área de diseño de un formulario | Crear formularios | Crear formularios con datos locales y remotos | DataSession