Como cambiar las propiedades de todos los formularios abiertos

A veces nos gustaría hacer algo con todos los formularios que están abiertos, por ejemplo minimizarlos a todos o mostrarlos a todos en cascada o mostrarlos ordenados alfabéticamente, o cerrarlos a todos de una vez, etc.

¿Cómo podemos conseguir eso?

Bueno, evidentemente el primer paso es saber cuales son los formularios que están abiertos. Una vez que tenemos ese dato ya podemos hacer lo que se nos ocurra con ellos.

FORM01

Captura 1. Si haces clic en la imagen la verás más grande

En la Captura 1. los dos primeros botones simplemente hacen un DO FORM para mostrar a los formularios, los interesantes son el tercer botón y el cuarto botón.

FORM02

Captura 2. Si haces clic en la imagen la verás más grande

El usuario hizo clic en el primer botón y luego hizo clic en el segundo botón y como consecuencia vemos la Captura 2.

FORM03

Captura 3. Si haces clic en la imagen la verás más grande

Cuando el usuario hace clic en el tercer botón vemos la Captura 3. 

Listado 1. El método CLICK() del tercer botón

LOCAL lnI, loForm

  #DEFINE CLR_AMARILLO Rgb(255, 255, 0)

  IF _Screen.FormCount = 0
    =MessageBox("No hay formularios abiertos")
    RETURN
  ENDIF

  FOR lnI = 1 TO _Screen.FormCount
    loForm           = _Screen.Forms(lnI)
    loForm.BackColor = CLR_AMARILLO
  ENDFOR

RETURN
*
*

En el Listado 1. hemos cambiado el valor de la propiedad BackColor, pero por supuesto podríamos cambiar (o conocer) el valor de cualquier otra propiedad (Caption, Height, Left, Top, Visible, Width, WindowState, etc.)

La propiedad _Screen.FormCount nos dice cuantos formularios están abiertos en este momento, y el array _Screen.Forms(lnI) nos devuelve un objeto de tipo formulario, el que se encuentra en la posición lnI.

De esta manera podremos manipular fácilmente a todos los formularios abiertos.

Listado 2. El método CLICK() del cuarto botón

LOCAL loForm, lnCantidadForms
  
  lnCantidadForms = _Screen.FormCount
  
  FOR lnI = lnCantidadForms TO 1 STEP -1
    loForm = _Screen.Forms(lnI)
    IF loForm.Name <> "Form1"
      loForm.Release()
    ENDIF
  ENDFOR
  
RETURN
*
*

Y al hacer clic en el cuarto botón, se cerrarán todos los formularios menos el formulario (o formularios) cuyo nombre sea «Form1».

El ciclo FOR…ENDFOR se recorrió desde el final hacia el principio porque el Visual FoxPro coloca en la posición 1 al último formulario abierto, en la posición 2 al anteúltimo formulario abierto, etc. Entonces, para no tener errores hay que recorrer desde el final hacia el principio.

Conclusión:

Poder cambiar o conocer los valores que tienen las propiedades de los formularios abiertos puede sernos muy útil en ocasiones, en este artículo puedes ver la forma de conseguirlo.

Artículos relacionados:

El índice del blog VFPavanzado

 

Deja un comentario