2009-09-03 16 views
13

Visual Studio 2008 IDEでエディタウィンドウ(タブ)を閉じるイベントをキャプチャします。 Iは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を返して閉じるそれを拒否して何もしません。 – ewall

答えて

0

あなたはWM_CLOSEWM_QUITWM_DESTROYを傍受するSetWindowsHookEx機能を使用してフックを設定することができるかもしれないいくつかのWindows APIコードを使用するために喜んでいる場合。それはこのようなものになるだろうC#ので

1

:あなたはクロージングイベントハンドラを追加し、

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

私は、提案するMDI子ウィンドウイベントを処理するライン上でチェックします!

参照しているエディタタブは、基本的にMDI子ウィンドウのインスタンスです。

希望すると便利です。

関連する問題