2009-09-03 5 views
13

Voglio catturare eventi che chiudono la finestra dell'editor (scheda) in IDE di Visual Studio 2008. Quando uso dte2.Application.Events.get_CommandEvents (NULL, 0) .BeforeExecute I catturate con successo tali eventi:Cattura evento chiusura finestra

  • File.Close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow e altri.

Se il codice nella finestra non è accettabile, interrompo l'evento (CancelDefault = true).

Ma se faccio clic sul pulsante "X" sul lato destro, "Salva modifiche"; viene visualizzata la finestra di dialogo, scheda con la finestra dell'editor chiusa e non ho alcun evento catturato. In questo caso, posso acquisire l'evento WindowClosing, ma non posso annullare l'evento.

È possibile gestire "x" l'evento di clic e arresto del pulsante?

+0

Se si fa clic su "X", ma "Salva modifiche" non viene visualizzato, il problema si verifica ancora? –

+0

C'è un motivo per cui non stai facendo la validazione e tale nei metodi di dialogo "Salva modifiche"? Comunemente, uno avrebbe gli eventi di chiusura della finestra per verificare le modifiche e avviare un prompt "Salva modifiche". Il metodo "Salva modifiche" restituirebbe True se la convalida era valida e il salvataggio è andato a buon fine o False se la convalida non è riuscita ... Quindi quel valore sarebbe stato restituito al gestore eventi chiusura finestra, True per andare avanti e chiudere la finestra o False per rifiutarlo e non fare nulla. – ewall

risposta

0

Se siete disposti a utilizzare un codice API di Windows potrebbe essere in grado di creare un gancio utilizzando la funzione di intercettare SetWindowsHookExWM_CLOSE, WM_QUIT e WM_DESTROY.

1

In C#, sarebbe qualcosa di simile: si aggiungere chiusura gestore di eventi e quindi

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

Vorrei suggerire, controllare le linee di gestione degli eventi di finestre MDI Child !!

La scheda di editor a cui si fa riferimento è fondamentalmente un'istanza di MDI Child Window.

Spero che questo aiuti!