none
Preguntar guardar antes de cerrar? RRS feed

  • Pregunta

  • Buenas!

    Hoy me encontre con un problemilla que no consigo darle solución, confio en que podáis ayudarme.

    Tengo una aplicación desarrollada en VB 2010 ( pienso quizás toca actualizarme, jeje), mi problema viene que al cerrar necesito comprobar si se guardo el documento y en caso de que no, lanzar el típico mensaje de "desea guardar?", la duda realmente la tengo en como detectar cuando se cierra el documento ya que los documentos los muestro mediante un control de usuario personalizado y no veo la forma de controlar cuando se "destruye" el control.

    Alguna idea? 

    Gracias!!

    lunes, 29 de julio de 2019 12:15

Respuestas

  • Gracias por adelantado  Javier, pero no podría hacerlo asi :(

    Lo que tengo es un único form, y en ese form, cargo un control de usuario que tengo realizado y que contiene los objetos que conforman el documento, en un mismo form,puedo cargar tantas veces como quiera ese control de usuario. 

    Tendría que ser con algún evento que se produzca cuando "desaparece" el control de usuario o bien algún elemento que contenga el control de usuario, pero por mas que he probado todos los que pienso que podrían ser ( dispone, finalize, handledestroyer…) ninguno parece funcionar.

    Se os ocurre alguna forma? o bien incorporar algún objeto dentro del control de usuario que permita hacer la llamada ?¿?¿

    Lo del form lo he probado y va genial, pero claro, tendría que reestructurar toda la aplicación.

    gracias!

    • Marcado como respuesta mayoko lunes, 29 de julio de 2019 20:47
    lunes, 29 de julio de 2019 15:11

Todas las respuestas

  • No se como estarás mostrando el documento pero supongo que pertenece a un formulario. Puedes controlar en el FormClosing de ese formulario si se ha salido sin guardar y mostrar ese mensaje.

    Saludos, Javier J

    lunes, 29 de julio de 2019 13:00
  • Gracias por adelantado  Javier, pero no podría hacerlo asi :(

    Lo que tengo es un único form, y en ese form, cargo un control de usuario que tengo realizado y que contiene los objetos que conforman el documento, en un mismo form,puedo cargar tantas veces como quiera ese control de usuario. 

    Tendría que ser con algún evento que se produzca cuando "desaparece" el control de usuario o bien algún elemento que contenga el control de usuario, pero por mas que he probado todos los que pienso que podrían ser ( dispone, finalize, handledestroyer…) ninguno parece funcionar.

    Se os ocurre alguna forma? o bien incorporar algún objeto dentro del control de usuario que permita hacer la llamada ?¿?¿

    Lo del form lo he probado y va genial, pero claro, tendría que reestructurar toda la aplicación.

    gracias!

    • Marcado como respuesta mayoko lunes, 29 de julio de 2019 20:47
    lunes, 29 de julio de 2019 15:11
  • Hola:

    1) Si pones "marcado como respuesta", poca gente va a leer tu problema y menos responder.

    2) Dices que puedes tener varios controles de usuario (UserControls) en el formulario y que quieres saber cuando el control "desaparece". Sin saber la lógica de tu aplicación (cuando un objeto tiene que aparecer/desaparecer), solo se puede asegurar que los controles desaparecen cuando se cierra el formulario.

    Si quieres que 'desaparezcan' antes del FormClosing, tendrás que 'hacer' algo en tu código para forzar que desaparezcan. También ayuda tener un código dentro del UserControl para hacer lo que quieras.

    También podrías 'pensar' si es necesario tener multiples UserControls en el formulario o en vez de esto tener solo uno, me explico:

    Tienes un UserControl con los métodos AbrirDocumento() y CerrarDocumento(). Y en este método, cuando abres un documento, se comprueba automáticamente si hay alguno abierto y se cierra.

    Class UserControl
       Dim docAbierto As <tuclasedoc>
    
       Sub AbrirDocumento(Nombre As String)
          ' Si hay documento abierto, lo cerramos.
          If docAbierto IsNot Nothing Then 
    CerrarDocumento()
    
          ' Acciones para Abrir Documento
          docAbierto = ...
       End Sub
    
       Sub CerrarDocumento()
           If docAbierto.HaCambiado AndAlso MsgBox("Guardar Cambios") = vbYes Then
              docAbierto.GuardarCambios()
           End If
       End Sub
    End Class
    
    ' De esta forma, cuando abres un documento se cierra el anterior.
    ' Solo tienes que llamar a CerrarDocumento() en el FormClosing
    
    

    Espero que te sirva

    Un saludo

    • Propuesto como respuesta LG DES lunes, 9 de septiembre de 2019 12:56
    martes, 30 de julio de 2019 6:13
  • Si es en un único formulario y se puede cargar ese control de usuario varias veces yo lo que haría es colocar la comprobación tanto en el formclosing del formulario como en el evento en el que se cargue el control. De esta forma se controla que cierre la aplicación sin grabar y/o que cambie el control de usuario sin grabar.

    Saludos, Javier J

    martes, 30 de julio de 2019 6:57
  • Muchas gracias y disculpa, lo marque como respuesta para darlo por cerrado, analizando el código me di cuenta que para cargar/descargar el usercontrol utilizo un control especifico de Purecomponents,  y para controlar cuando abro o cierro, estoy atado a las opciones/eventos que de serie me proporciona dicho control.

    Quedo muy agradecido por el código, que sin duda, seguramente me sea de utilidad en otra aplicación en la que no haga uso de este componente.

    Mil disculpas, pues no lo hice con otra intención!!

    martes, 30 de julio de 2019 11:30