SoloCodigo

Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: pacegar en Martes 16 de Diciembre de 2003, 17:52

Título: Deshabilitar El Cierre De Un Mdichild
Publicado por: pacegar en Martes 16 de Diciembre de 2003, 17:52
Me gustaría poder deshabilitar la "X" de un formulario padre de mi aplicacion, para que, por error, no se pueda cerrar al pulsarla... o por lo menos mostrar un mensaje de que si se desea cerrar realmente.

Gracias de antemano...
 :blink:
Título: Re: Deshabilitar El Cierre De Un Mdichild
Publicado por: Brroz en Martes 16 de Diciembre de 2003, 18:22
Hola pacegar.

Esta es una pregunta recurrente...

Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
       If UnloadMode = 0 Then
                   If vbCancel = MsgBox( "¿Desea realmente salir?",vbOkCancel,"Salir") = vbCancel Then Cancel = 1
       End If
End Sub

Suerte.
Título: Re: Deshabilitar El Cierre De Un Mdichild
Publicado por: pacegar en Martes 16 de Diciembre de 2003, 19:19
No logro que me funcione...

Al pulsar sobre la "X" cierto que entra en MDIForm_QueryUnload pero luego me salta a MDIForm_Unload y me cierra la aplicacion, sin tener en cuenta lo que haya contestado antes en la pregunta de salir si o no...
Título: Re: Deshabilitar El Cierre De Un Mdichild
Publicado por: Brroz en Martes 16 de Diciembre de 2003, 19:43
Fíjate en el valor de UnloadMode, indica el motivo de descarga del formulario:

0 - El usuario a pulsado en la X.
1 - El formulario se ha descargado por código (Unload Objeto).
2 - Windows se está cerrando.
3 - Se cerró desde el administrador de tareas.
4 - El form MDI Child se cierra porque su 'padre' se cierra.
5 - Un form se cierra porque su formulario propietario se cierra.

Cuando detectes que UnloadMode = 0 (es igual a cero), entonces das al parámetro Cancel que se pasa por referencia el valor 1, cancelando la operación de descarga.

Te aseguro que esto funciona así en cualquier plataforma o versión de windows que utilices.

De todas formas me acabo de fijar en un gazapo en el código que te escribí, seguro que no funciona por esto:

Don dije...
If vbCancel = MsgBox( "¿Desea realmente salir?",vbOkCancel,"Salir") = vbCancel  Then

Debería decir...
If MsgBox( "¿Desea realmente salir?",vbOkCancel,"Salir") = vbCancel Then

Pero hoooombre...hay que se fijar maaaaás.

Chao.
Título: Re: Deshabilitar El Cierre De Un Mdichild
Publicado por: pacegar en Martes 16 de Diciembre de 2003, 19:51
Ok, si de ese "gazapo" ya me habia percatado...

Lo he vuelto a probar y ya me funciona... No entiendo pq antes no funcionaba.
Gracias!

 :kicking:
Título: Re: Deshabilitar El Cierre De Un Mdichild
Publicado por: jcae83 en Martes 31 de Octubre de 2006, 15:02
Cuando des clic en la X  aparecera un mensaje cerrar si o no

 yo coloco en el formulario que deseo cerrar el sigte codigo:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
 Dim Msg ' Declara la variable.
    If UnloadMode > 0 Then
        ' Si sale de la aplicación.
        Msg = "¿Realmente desea salir de la aplicación?"
    Else
        ' Si sólo se cierra el formulario.
        Msg = "¿Realmente desea cerrar el formulario?"
    End If
    ' Si el usuario hace clic en el botón No, se detiene QueryUnload.
    If MsgBox(Msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True
End Sub

solo copia y pega