Autor Tema: Cerrar todas las forms al mismo tiempo  (Leído 15574 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Cerrar todas las forms al mismo tiempo
« en: 17 de Septiembre de 2007, 12:07:36 »
Hola  :mrgreen:

Tengo la siguiente problemática... tengo 3 forms dentro de un exe. Cada form se muestra en determinado momento, la form de configuración, la form principal y una form pequeña que funciona como alarma.

La form que siempre se está mostrando es la principal. Solo una form está visible en un momento, por ejemplo, si la form principal es visible, las otras dos están ocultas.

Mi problema está en que si el usuario quiere finalizar el programa (las 3 forms) va a dar click en el tache de Cerrar. Pero aquí está el problema, si clickea el tache de una form, las otras 2 se siguen ejecutando y se quedan ocultas. ¿Qué hago para cerrar las 3 forms al mismo tiempo cuando da click en el tache?

Además no conozco como meter código en el evento del click de ese tache.

 :o Gracias


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #1 en: 17 de Septiembre de 2007, 13:17:51 »
Dentro de la lista de eventos del Form, tienes un par de ellos que te pueden servir:
Form1_FormClosing: se ejecuta en el momento de cerrar
Form1_FormClosed: se ejecuta una vez cerrada

En cualquier de ellos puedes poner:
End

Eso finalizará tu aplicación y todos los forms que haya abiertos.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #2 en: 17 de Septiembre de 2007, 14:10:02 »
Holaaaaaa:

Aparte de lo que dice el Sr. Nocturno, intenta hacer que el form principal sea propietario, de las otras dos form.
Entonces al cerrar automaticamente cierran todas.
Espero que esto te pueda ayudar.
Ejemplo:
Código: [Seleccionar]
'''Muestra el Formulario "Form2" y se hace propietario,
'''asegura que se cierre el dialogo.
Form2.Show vbModeless, Form1

Si me equivoqué de respuesta sepa disculparme.

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #3 en: 17 de Septiembre de 2007, 14:24:27 »
hay un procedimientio llamado unload, sirve para descargar el formulario de la ejecución principal

también es válido usar Unload me

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #4 en: 17 de Septiembre de 2007, 14:35:35 »
Suena bien pero... desconozco como agregar esos eventos Nocturno  :oops: ¿Cómo los agrego?

IAO, con la función...

Form2.Show vbModeless, Form1

Se hace el propietario a Form1. Entonces si cierro con tache el form1, ¿se cierra form2 también?

Pedro, la función unload me imagino que es para cerrar y detener la ejecución de un formulario ¿verdad? Ahorita que sepa cómo ponerla dentro del evento formclosing la pruebo.  :mrgreen:

Otra pregunta, ¿unload equivale a end?

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #5 en: 17 de Septiembre de 2007, 14:40:12 »
si quieres cerrar, las ventanas ocultas desde el form principal, puedes hacerlo dentro de Terminate

Private Sub Form_terminate()
 unload form1 ' ventana oculta 1
 unload form2 ' ventana oculta 2
 ...

End Sub

también puedes hacerlo usando el método End

Private sub_Terminate()

End

end sub

el procedimiento terminate se ejecuta cuando clicas en la [X] de la ventana para cerrarla, es la última opción para cerrar una ventana
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #6 en: 17 de Septiembre de 2007, 14:55:31 »
Unload descarga el formulario de la memoria.

End finaliza cualquier cosa en el formulario principal (incluyendo los otros formularios)

----

concretamente la explicación:

http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vblr7/html/vastmend.asp

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #7 en: 17 de Septiembre de 2007, 15:08:46 »
Pedrooo, no funcionaaaa  :(

Copié este código en mi form1, que es la que va a cerrar a la 2 y 3...

'Llega aquí si el usuario dio click en el tache de cerrar
'Se encarga de cerrar todas las ventanas al mismo tiempo
Private Sub Form1_Terminate()
    Unload Form2
    Unload Form3
    End
End Sub

Y para verificar que pasa por ahí la ejecución del programa le puse un Breakpoint (un puntito negro a la izquierda), pero al dar click en el tache de cerrar ventana: la cierra y siguen ocultas las otras dos. Nunca pasa por esa subfunción la ejecución del programa. ¿Hay que hacerle saber a VB que quiero que se active ese evento?

Sé que están ocultas porque el botón de STOP de visual basic



sigue activo.

Desconectado PalitroqueZ

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #8 en: 17 de Septiembre de 2007, 15:14:05 »
umm...

con

...
Unload Form2
Unload Form3
...

¿te corrió el programa?

tienes que ponerle el nombre del formulario.

en cuanto a End, está demás, debió haberte funcionado.

prueba hacerlo así

Código: Visual Basic
  1. Private Sub CommandButton_Click()
  2.  
  3.   Unload nombre_ventana secundaria1
  4.   Unload nombre_ventana secundaria2
  5.   Unload me
  6.  
  7. End Sub


PD: no tengo el vb instalado en esta máquina...  :(
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #9 en: 17 de Septiembre de 2007, 15:18:07 »
Hola:

Pero como te escribí, no te hace falta nada más. Al cerrar el principal se cierran todas
y lo descarga de la memoria.

Bye('_')
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #10 en: 17 de Septiembre de 2007, 15:22:43 »
Hola:

Mira este ejemplito que hice. En este subforo.
http://www.todopic.com.ar/foros/index.php?topic=18657.msg130342#msg130342

Es lo mejor que conseguí, porque me pasaba algo parecido. Eso lo saqué de la ayuda MSND no se si
me equivoqué al escribirlo. Porque sino debes usar el unload y form_unload.
Que vá  esto es más rápido.

Bye('_').
« Última modificación: 17 de Septiembre de 2007, 15:26:28 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #11 en: 17 de Septiembre de 2007, 15:33:35 »
Pedro, sí corre el programa, los nombres de mis form son los mismos.  :(

El detalle está en que la subfunción terminate nunca se ejecuta, el programa nunca pasa por ella.

IAO, ¿me podrías ayudar con las instrucciones? El proceso es el siguiente...

- Abre form2
- El usuario da click en aceptar de la form2 y se oculta la form2, es aquí en donde pongo el código siguiente

    Me.Hide
    Form1.Show

- Abre form1
- El usuario trabaja con la form1
- El usuario ya terminó y desea cerrar el programa por lo que da click en el tache de cerrar de la form1

Es después del click cuando se deben cerrar la form2 y la form3.

Yo ya intenté lo siguiente en el código de la form2:

    Me.Hide
    Form1.Show vbModeless, Form2

Pero ya estando en la form1 y al dar click en el tache, solo se cierra la form1, y el botón de stop de VB sigue activo:



por lo que deduzco que la form2 y la form3 siguen escondidas y ejecutándose.

Otra forma de saber que las otras 2 ventanas ocultas siguen ejecutándose es generando el .exe del proyecto. Hago lo mismo, cierro con el tache la form1 y luego me voy al Administrador de tareas de Windows... ahí seguirá aparaciendo el proyecto.exe ejecutándose.
« Última modificación: 17 de Septiembre de 2007, 15:38:16 por migsantiago »

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #12 en: 17 de Septiembre de 2007, 15:48:00 »
Hola:

Al cerrar debe detenerse todo. No soy un gran programador pero algo así me pasó.

Creo que lo estas poniendo donde no vá.

Olvidate del form2 y form3. Instala solo la parte en el form1.
Código: [Seleccionar]
Private Sub Form_Load()
    Form2.Show vbModeless, Form1    <--Aquí form1 se hace propietario, es el papaito.
    Form3.Show vbModeless, Form1
    End Sub

Y cierralo, al cerrar debe cerrar todo. Y salir modo ejecución.

bye('_').

« Última modificación: 17 de Septiembre de 2007, 15:52:53 por IAO »
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado IAO

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 702
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #13 en: 17 de Septiembre de 2007, 16:01:38 »
Hola:

Si miki, ellas estan ocultas porque el form1, no se ha hecho propietario de las otras dos. Si tienes el msdn a mano
buscate el vbModeless, pienso que no te sé transmitir mi experiencia.

Bye('_').
"No hay caminos para lograr la PAZ. La PAZ es el camino"... (Mahatma Gandhi).
Mentes Superiores discuten Ideas, Proyectos. Mentes Promedio discuten Acontecimientos y Sucesos. Mentes Pobres discuten sobre Personas.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Cerrar todas las forms al mismo tiempo
« Respuesta #14 en: 17 de Septiembre de 2007, 16:02:02 »
IAO

Puse el siguiente código en el load de la form1

    'esto se hace para que form1 sea dueña de fomr2 y 3
    'cuando se da click en cerrar [X] de la form1 también se cierran 2 y 3
    Form2.Show vbModeless, Form1
    Form2.Hide
    Form3.Show vbModeless, Form1
    Form3.Hide

Funcionó a la perfección. Gracias.

Pedro, ya descubrí porque el terminate no se ejecutaba, la función la declaré mal...

Private Sub Form1_Terminate()

Debería ser:

Private Sub Form_Terminate()

Ya encontré los demás eventos disponibles, están en una lista aquí:



Es así como vi que hay que poner form en vez de form1.

Gracias  :mrgreen:


 

anything