2009-09-03 15 views
13

Je souhaite capturer des événements qui ferment la fenêtre de l'éditeur (onglet) dans l'IDE de Visual Studio 2008. Lors de l'utilisation dte2.Application.Events.get_CommandEvents (NULL, 0) .BeforeExecute I capturés avec succès de tels événements:Événement de fermeture de la fenêtre de capture

  • file.close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow et autres.

Si le code dans la fenêtre n'est pas acceptable, j'arrête l'événement (CancelDefault = true).

Mais si je clique sur le bouton "X" sur le côté droit, "Enregistrer les modifications"; la boîte de dialogue apparaît, l'onglet ferme la fenêtre de l'éditeur et je n'ai aucun événement capturé. Dans ce cas, je peux capturer événement WindowClosing, mais ne peut pas annuler l'événement.

Est-il poosible de gérer "x" cliquez sur le bouton et arrêter l'événement?

+0

Si vous cliquez sur "X", mais que "Enregistrer les modifications" n'apparaît pas, le problème persiste-t-il? –

+0

Y a-t-il une raison pour laquelle vous ne faites pas la validation, par exemple, dans les méthodes de dialogue "Enregistrer les modifications"? Généralement, les événements de fermeture de fenêtre vérifient les modifications et lancent une invite «Enregistrer les modifications». La méthode "Save Changes" retournerait alors True si la validation était bonne et que la sauvegarde était réussie, ou False si la validation échouait ... Ensuite, cette valeur serait renvoyée au gestionnaire d'événement window-close, True pour aller de l'avant et se fermer la fenêtre ou Faux pour le rejeter et ne rien faire. – ewall

Répondre

0

Si vous êtes prêt à utiliser un code API Windows que vous pourriez être en mesure de mettre en place un crochet en utilisant la fonction SetWindowsHookEx pour intercepter WM_CLOSE, WM_QUIT et WM_DESTROY.

1

En C# ce serait quelque chose comme ceci: vous ajoutez de clôture gestionnaire d'événements, puis

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

Je suggère, vérifier les lignes de manipulation MDI événements fenêtre enfants !!

L'onglet de l'éditeur auquel vous faites référence est essentiellement une instance de MDI Child Window.

Espérons que cela aide!