2009-09-03 26 views
13

Quiero capturar eventos que cierran la ventana del editor (pestaña) en Visual Studio 2008 IDE. Cuando uso dte2.Application.Events.get_CommandEvents (NULL, 0) .BeforeExecute I capturados con éxito este tipo de eventos:Capturar ventana cerrar evento

  • file.close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow y otros.

Si el código en la ventana no es aceptable, detengo el evento (CancelDefault = true).

Pero si hago clic en el botón "X" en el lado derecho, "Guardar cambios"; aparece el cuadro de diálogo, la ventana del editor está cerrada y no tengo ningún evento capturado. En este caso, puedo capturar el evento WindowClosing, pero no puedo cancelar el evento.

¿Es posible manipular el botón "x" al hacer clic y detener el evento?

+0

Si hace clic en "X", pero "Guardar cambios" no aparecerá, ¿el problema persiste? –

+0

¿Hay alguna razón por la que no está haciendo la validación y tal en los métodos de diálogo "Guardar cambios"? Comúnmente, uno debería tener los eventos de cierre de la ventana para buscar cambios e iniciar un mensaje de "Guardar cambios". El método "Guardar cambios" devolvería Verdadero si la validación era buena y el guardado fue exitoso, o Falso si la validación falló ... Entonces ese valor se enviaría nuevamente al manejador de evento de cierre de ventana, Verdadero para avanzar y cerrar la ventana o False para rechazarla y no hacer nada. – ewall

Respuesta

0

Si usted está dispuesto a utilizar un código API de Windows que podría ser capaz de configurar un gancho utilizando la función de interceptar SetWindowsHookExWM_CLOSE, WM_QUIT y WM_DESTROY.

1

En C# sería algo como esto: que añadir Cierre controlador de eventos y luego

void MyWindow_Closing(object sender, CancelEventArgs e) 
     { 
      if(something) 
       e.Cancel = true; //<- thats the magic part you want 
} 
0

Yo sugeriría, comprobar las líneas de manejo de eventos de ventana MDI secundarios !!

La pestaña del editor a la que se refiere es básicamente una instancia de MDI Child Window.

Espero que esto ayude!

Cuestiones relacionadas