2009-09-03 6 views
13

Я хочу захватить события, закрывающие окно редактора (вкладку) в среде Visual Studio 2008 IDE. Когда я использую dte2.Application.Events.get_CommandEvents (NULL, 0) .BeforeExecute I успешно захватили такие события:Захват окна закрыть событие

  • file.close
  • File.CloseAllButThis
  • File.Exit
  • Window.CloseDocumentWindow и другие.

Если код в окне неприемлем, я останавливаю событие (CancelDefault = true).

Но если я нажму кнопку «X» с правой стороны, «Сохранить изменения»; диалоговое окно, вкладка с окном редактора закрывается, и у меня нет никаких захваченных событий. В этом случае я могу захватить событие WindowClosing, , но не может отменить событие.

Можно ли использовать кнопку «x» для нажатия кнопки и остановки?

+0

Если вы нажмете «X», но «Сохранить изменения» не появится, проблема не исчезнет? –

+0

Есть ли причина, по которой вы не выполняете валидацию, и так в методах диалога «Сохранить изменения»? Как правило, события, закрывающие окно, проверяют изменения и инициируют запрос «Сохранить изменения». Метод «Сохранить изменения» затем вернет True, если проверка была хорошей, и сохранение было успешным, или False, если проверка не прошла ... Затем это значение будет отправлено обратно в обработчик события закрытия окна, True, чтобы продолжить и закрыть окно или False, чтобы отклонить его и ничего не делать. – ewall

ответ

0

Если вы готовы использовать код API Windows, вы можете быть в состоянии установить крюк с помощью функции SetWindowsHookEx для перехвата WM_CLOSE, WM_QUIT и WM_DESTROY.

1

В C# это было бы что-то вроде этого: вы добавляете Закрыв обработчик события, а затем

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

Я хотел бы предложить, проверить на линиях обработки MDI Child события окна !!

Вкладка редактора, к которой вы обращаетесь, в основном представляет собой экземпляр окна MDI Child.

Надеюсь, это поможет!

Смежные вопросы