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