Abrir un segundo form y cerrar el actual

10/10/2005 - 12:01 por Baldor | Informe spam
¿se puede hacer? Debería ser sencillo pero no lo consigo.

Si declaro el form2 local en el form1, al cerrar el form1, se termina la
aplicación.
Pero si lo declaro como publico en un modulo, pasa exactamente lo mismo.

Quiero hacer algo como esto:


frmB = New frmPaso2
frmB.Show()
Me.Close()


Donde Me seria el frmA o frmPaso1. Lo que ocurre es que al hacer Me.Close,
la aplicación termina y se cierra tanto el frmA como el frmB recien
mostrado.

¿Como se debe hacer para que funcione?

Preguntas similare

Leer las respuestas

#1 SoftJaén
10/10/2005 - 13:45 | Informe spam
"Baldor"escribió:

Si declaro el form2 local en el form1, al cerrar el form1, se termina la
aplicación.
Pero si lo declaro como publico en un modulo, pasa exactamente
lo mismo.



Hola:

Eso es así porque seguramente tendrás establecido a Form1 como el formulario
de inicio de la aplicación, y al cerrar dicho formulario de inicio, se
cierran automáticamente todos los formularios que tengas abiertos,
finalizando la aplicación.


Quiero hacer algo como esto:

frmB = New frmPaso2
frmB.Show()
Me.Close()


Donde Me seria el frmA o frmPaso1. Lo que ocurre es que al hacer Me.Close,
la aplicación termina y se cierra tanto el frmA como el frmB recien
mostrado. ¿Como se debe hacer para que funcione?



Al mostrar de manera NO MODAL el formulario B, el código seguirá
ejecutándose y se cerrará el formulario de inicio, con lo que la aplicación
finalizará. Para evitar esa circunstancia, por ejemplo, podrías mostrar el
segundo formulario de manera MODAL, y en lugar de cerrar el primer
formulario, lo dejarías oculto o no visible, restaurándolo nuevamente cuando
se cierre el segundo formulario:

Private Sub Button1_Click (...) Handles Button1.Click

' Ocultamos el formulario inicial
Me.Visible = False

' Mostramos el segundo formulario de manera modal
Dim frmB As New Form2
frmB.ShowDialog()

' Una vez que se cierre el segundo formulario,
' volvemos a visualizar el primer formulario
Me.Visible = True

End Sub

De todas maneras, si tu intención es trabajar con varios formularios
independientes, lo mismo te puede ser útil el usar un formulario MDI que sea
el formulario inicial de la aplicación, y posteriormente mostrar como
formularios modales los restantes formularios de la aplicación. Por
supuesto, al cerrar el formulario inicial MDI, se cerrarán todos los
formularios NO MODALES que actualmente se encuentren activos.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#2 Baldor
10/10/2005 - 15:25 | Informe spam
Gracias por contestar SoftJaén. Te comento:

Form1 no es el formulario de inicio, la aplicación arranca en un Sub
Main de un módulo.
Ocultar el formulario no me sirve, porque form2 llamará a un form3, etc,
etc. y tener x formularios abiertos y ocultos no me parece muy óptimo. Y un
MDI no creo que sea necesario ya que lo que pretendo es crear algo similar
al típico Wizard con el boton de Siguiente, y que cada form será un paso del
proceso.

Como no conseguía hacer lo que quería he decidido poner un formulario
con un Panel en el cual voy cargando y cerrando los otros forms segun se va
pulsando en el boton Siguiente.
No se si esta alternativa es muy correcta, ¿hay otra forma mejor de
hacer esto?



"SoftJaén" escribió en el mensaje
news:
"Baldor"escribió:

Si declaro el form2 local en el form1, al cerrar el form1, se termina la
aplicación.
Pero si lo declaro como publico en un modulo, pasa exactamente
lo mismo.



Hola:

Eso es así porque seguramente tendrás establecido a Form1 como el
formulario
de inicio de la aplicación, y al cerrar dicho formulario de inicio, se
cierran automáticamente todos los formularios que tengas abiertos,
finalizando la aplicación.


Quiero hacer algo como esto:

frmB = New frmPaso2
frmB.Show()
Me.Close()


Donde Me seria el frmA o frmPaso1. Lo que ocurre es que al hacer
Me.Close,
la aplicación termina y se cierra tanto el frmA como el frmB recien
mostrado. ¿Como se debe hacer para que funcione?



Al mostrar de manera NO MODAL el formulario B, el código seguirá
ejecutándose y se cerrará el formulario de inicio, con lo que la
aplicación
finalizará. Para evitar esa circunstancia, por ejemplo, podrías mostrar el
segundo formulario de manera MODAL, y en lugar de cerrar el primer
formulario, lo dejarías oculto o no visible, restaurándolo nuevamente
cuando
se cierre el segundo formulario:

Private Sub Button1_Click (...) Handles Button1.Click

' Ocultamos el formulario inicial
Me.Visible = False

' Mostramos el segundo formulario de manera modal
Dim frmB As New Form2
frmB.ShowDialog()

' Una vez que se cierre el segundo formulario,
' volvemos a visualizar el primer formulario
Me.Visible = True

End Sub

De todas maneras, si tu intención es trabajar con varios formularios
independientes, lo mismo te puede ser útil el usar un formulario MDI que
sea
el formulario inicial de la aplicación, y posteriormente mostrar como
formularios modales los restantes formularios de la aplicación. Por
supuesto, al cerrar el formulario inicial MDI, se cerrarán todos los
formularios NO MODALES que actualmente se encuentren activos.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado
o
sugerido en el presente mensaje.



Respuesta Responder a este mensaje
#3 SoftJaén
10/10/2005 - 16:23 | Informe spam
"Baldor" escribió:

Form1 no es el formulario de inicio, la aplicación arranca en un Sub Main
de un módulo.



Me parece muy bien que Form1 no sea el formulario de inicio, pero en el
procedimiento «Sub Main» de un módulo, digo yo que habrás indicado que algún
formulario sea el inicial, mediante el método «Run» de la clase
«Application», porque de lo contrario, la aplicación terminará sin más.

En tu anterior mensaje escribistes lo siguiente:

Si declaro el form2 local en el form1, al cerrar el form1, se termina la
aplicación.



Si al cerrar Form1 se termina la aplicación, entiendo que Form1 es el
formulario de inicio de la aplicación, y como te indiqué anteriormente, si
se cierra el formulario inicial de la aplicación, se cierran todos los
formularios NO MODALES que se encuentren actualmente abiertos, y la
aplicación finalizará.

Ocultar el formulario no me sirve, porque form2 llamará a un form3,
etc, etc. y tener x formularios abiertos y ocultos no me parece muy
óptimo. Y un MDI no creo que sea necesario ya que lo que pretendo es crear
algo similar al típico Wizard con el boton de Siguiente, y que cada form
será un paso del proceso.



Bueno, yo te indiqué un ejemplo; desconocía por completo que Form2 tiene que
llamar a Form3, y éste a Form4, etc., y menos aún sabía que deseabas hacer
«algo similar al típico Wizard».


Como no conseguía hacer lo que quería he decidido poner un formulario
con un Panel en el cual voy cargando y cerrando los otros forms segun se
va pulsando en el boton Siguiente.
No se si esta alternativa es muy correcta, ¿hay otra forma mejor de
hacer esto?



¡Hombre! Crear un asistente mediante formularios, es una opción, pero no
creo que sea la más idónea, si tu intención es crear el típico formulario
asistente. Mejor sería tener un formulario con distintos objetos «Panel»,
cada cual debidamente configurados según las necesidades que requiera, de
tal forma que al pulsar el botón «Siguiente», ocultaras el primer panel y
mostraras el segundo panel, o viceversa, y así, sucesivamente hasta llegar
al botón «Finalizar», donde se cerraría el formulario.

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
Respuesta Responder a este mensaje
#4 Eduardo A. Morcillo [MS MVP VB]
10/10/2005 - 16:28 | Informe spam
Form1 no es el formulario de inicio, la aplicación arranca en un
Sub Main de un módulo.



Pero haces un "Application.Run(New Form1)" o similar ¿no? Eso hace que el
formulario que pases a Run maneje el cierre de la aplicacion.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#5 Baldor Renwald
10/10/2005 - 22:27 | Informe spam
OK. Mil perdones por lo del formulario inicial, en efecto es el que arranco
en el Main, y perdona por no haber dado más detalles de lo que realmente
pretendía hacer.

Por otro lado, gracias por la idea de los paneles; lo cierto es que lo
pensé, pero no me decidí a ello, por si habiendo muchos pasos (paneles), el
formulario quedara muy sobrecargado.

Solo una cosilla más, ya solo por curiosidad. Entiendo que si form1 es el
formulario inicial de una aplicación, ¿ya no hay forma humana de cargar otro
form, y cerrar form1, sin que la aplicación termine?
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida