• Domingo 22 de Diciembre de 2024, 08:18

Autor Tema:  Deshabilitar El Cierre De Un Mdichild  (Leído 1849 veces)

pacegar

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: es
    • Ver Perfil
    • INTEGRA Canarias
Deshabilitar El Cierre De Un Mdichild
« en: Martes 16 de Diciembre de 2003, 17:52 »
0
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:
Pedro Acevedo
Director de Desarrollo
INTEGRA Tecnología y Comunicación de Canarias
www.integracanarias.com

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Deshabilitar El Cierre De Un Mdichild
« Respuesta #1 en: Martes 16 de Diciembre de 2003, 18:22 »
0
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.

pacegar

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: es
    • Ver Perfil
    • INTEGRA Canarias
Re: Deshabilitar El Cierre De Un Mdichild
« Respuesta #2 en: Martes 16 de Diciembre de 2003, 19:19 »
0
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...
Pedro Acevedo
Director de Desarrollo
INTEGRA Tecnología y Comunicación de Canarias
www.integracanarias.com

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Deshabilitar El Cierre De Un Mdichild
« Respuesta #3 en: Martes 16 de Diciembre de 2003, 19:43 »
0
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.

pacegar

  • Miembro MUY activo
  • ***
  • Mensajes: 108
  • Nacionalidad: es
    • Ver Perfil
    • INTEGRA Canarias
Re: Deshabilitar El Cierre De Un Mdichild
« Respuesta #4 en: Martes 16 de Diciembre de 2003, 19:51 »
0
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:
Pedro Acevedo
Director de Desarrollo
INTEGRA Tecnología y Comunicación de Canarias
www.integracanarias.com

jcae83

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Deshabilitar El Cierre De Un Mdichild
« Respuesta #5 en: Martes 31 de Octubre de 2006, 15:02 »
0
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