2009-09-03 20 views
13

Chcę przechwytywać zdarzenia zamykające okno edytora (kartę) w IDE Visual Studio 2008. Gdy używam dte2.Application.Events.get_CommandEvents (NULL, 0) .BeforeExecute pomyślnie złapanych takie wydarzenia:Zdarzenie zamknięcia okna przechwytywania

  • plik.close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow i inne.

Jeśli kod w oknie nie jest akceptowalny, zatrzymuję zdarzenie (CancelDefault = true).

Ale jeśli kliknę przycisk "X" po prawej stronie, "Zapisz zmiany"; pojawi się okno dialogowe, zakładka z zamknięciem okna edytora i nie mam żadnych przechwyconych zdarzeń. W takim przypadku mogę przechwycić zdarzenie WindowClosing, , ale nie można anulować zdarzenia.

Czy można obsłużyć przycisk "x", kliknij i zatrzymaj wydarzenie?

+0

Po kliknięciu "X", ale "Zapisz zmiany" nie pojawi się, czy problem nadal występuje? –

+0

Czy istnieje powód, dla którego nie przeprowadza się sprawdzania poprawności i innych metod w oknie dialogowym "Zapisz zmiany"? Często zdarza się, że zdarzenia zamknięcia okna sprawdzają zmiany i rozpoczynają monit "Zapisz zmiany". Metoda "Zapisz zmiany" zwróci wartość "prawda", jeśli sprawdzanie poprawności będzie poprawne, a operacja zapisu się powiedzie, lub "fałsz", jeśli sprawdzanie poprawności nie powiodło się ... Wtedy ta wartość zostanie wysłana z powrotem do procedury obsługi zdarzeń zamykania okna True, aby kontynuować i zamknąć okno lub Fałsz, aby je odrzucić i nic nie robić. – ewall

Odpowiedz

0

Jeśli jesteś gotów do korzystania niektóre okna kodu API może być w stanie założyć hak przy użyciu funkcji SetWindowsHookEx przechwycić WM_CLOSE, WM_QUIT i WM_DESTROY.

1

W języku C# byłoby mniej więcej tak: ty dodaj Zamknięcie obsługi zdarzeń, a następnie

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

Proponuję sprawdzić na liniach obsługi zdarzeń podrzędnych MDI okno !!

Zakładka edytora, do której się odnosisz, jest po prostu instancją okna potomnego MDI.

Mam nadzieję, że to pomoże!