Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

Borrar este aviso
El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

gbx3 [3161]: warning: 2909 allocation(s) non freed.
#11

" supongo que se puede llamar al Form_Close() del formulario principal desde cualquier otro formulario mediante una función pública o un evento creado ad-hoc. "

Exactamente.
En estos casos el Evento "Form_Close() " es muy util.

In praeterita spectando dolenter subfero.
#12

Cita:"entonces cierras la ventana principal de la aplicación y te quedan abiertas 3 o cuatro según el usuario las haya abiertos y queda desprolijo que tu programa este cerrado y queden ventanas ahí sin cerrar y ni te cuento si hay algún vídeo o audio ejecutándose o algún timer"

Os dejo un ejemplo de una forma de "recopilar" las ventanas que se abren y que cuando cierro "el formulario principal", se cierren tambien ellas:

 
GAMBAS
  1. ' Gambas class file
  2.  
  3. Public ListaVentanas As New Variant[]
  4.  
  5. Public Sub Button1_Click()
  6.  
  7.     Dim ftmp As New Form1
  8.  
  9.     ftmp.show()
  10.  
  11.     ListaVentanas.add(ftmp)
  12.  
  13.  
  14. Public Sub Button2_Click()
  15.  
  16.     Dim ftmp As New Form2
  17.  
  18.     ftmp.show()
  19.  
  20.     ListaVentanas.add(ftmp)
  21.  
  22.  
  23. Public Sub ButtonCerrar_Click()
  24.  
  25.     Me.Close()
  26.  
  27.  
  28. Public Sub Form_Close()
  29.  
  30.     Dim f As Variant
  31.  
  32.     ' 'cierro todo lo que hay abierto
  33.     For Each f In ListaVentanas
  34.  
  35.         Try f.Close()
  36.         'puede ser que alguna ventana ya no exista, por eso pongo TRY
  37.  
  38.     Next
  39.     'fin del programa al cerrar el formulario principal (y automáticamente se cierra los formularios auxiliares)
  40.  




Archivos adjuntos
.gz recopiladorventanas-0.0.1.tar.gz Tamaño: 11.76 KB  Descargas: 1
#13

julio en eso pensaba como solución, no se si exacto como ese código pero... no se donde lo mencione, tener una variable publica en el formulario principal y añadir todos los formularios que no sean en modo showmodal, y al cerrar hacer un foreach.

voy a probar el código y después te cuento, gracias por el ejemplo

una pregunta julio, en vez de usar variant, no seria Windows[]

los formularios son ventanas no?

El tiempo de las manifestaciones caducó pero el boicot con auto sacrificio es el camino para derrotar al sistema.
#14

(25-09-2020, 14:56)kokodrilo escribió:  os formularios son ventanas no?

Sì, pero porqué no usar un array de Form ?

In praeterita spectando dolenter subfero.
#15

Kokodrilo:
Cita:en vez de usar variant, no seria Windows[]

los formularios son ventanas no?

Uso un array de variant[] es porque admite todo clase de objetos, (en este caso concreto son ventanas), pero puede ver otros casos que también te interese añadirles al array procesos o timer.

Saludos

'Nota:
Si son timer, tienes que cerrarlos con .stop (y no con .close())
#16

si seria mas preciso, vuott

julio, si variant parecería lo mas acertado y escalable.
ya probé y anda bien, lo que tengo que añadir todos los formularios en su evento open, espero sea el correcto,

cree una variable global  VentanasAbiertas y al principio del evento open de cada formulario pongo VentanasAbiertas.Add(me)
y bueno en close el foreach.

'Nota:
Si son timer, tienes que cerrarlos con .stop (y no con .close())

si eso es obvio julio, ahí ya hay que recorrer el array identificar que tipo de objeto y ejecutar la accion.

El tiempo de las manifestaciones caducó pero el boicot con auto sacrificio es el camino para derrotar al sistema.


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)