3

C# で開発された Microsoft Word アドインがあります。ユーザーが変更を保存していないドキュメントを閉じようとすると、[保存] ダイアログ ボックスが表示されます。ユーザーが [保存] ダイアログで [キャンセル] をクリックした場合にキャプチャする方法はありますか?

保存ダイアログが表示される前に DocumentBeforeClose イベントが発生し、保存ダイアログ イベントをカプセル化するイベントが発生していないように見えます。

これが必要な理由: ユーザーが最後のドキュメントを閉じた場合、アドイン ツールバーをクリーンアップする必要があります。ただし、DocumentBeforeClose イベントでクリーンアップを行い、ユーザーが [キャンセル] をクリックすると、アドイン ツールバーの状態が正しくなくなります。

編集/更新:

Rob Allen が提案したように、私は現在、ShutDown イベントを使用して親オブジェクトのクリーンアップを行い、BeforeClose イベントを使用して親オブジェクトのクローズ前の検証を行っています。私の検証ではドキュメントを保存する必要があり、BeforeClose によって呼び出されるメソッドでそれを実行しようとします。ドキュメントが一度も保存されていない場合は、[名前を付けて保存] ダイアログが表示されます。ユーザーが [キャンセル] をクリックすると、COMException がスローされ、それをキャッチします。次に、[保存/保存しない/キャンセル] ダイアログが表示されます。ユーザーが [保存しない] をクリックすると、ShutDown イベントは発生しません。ユーザーが [名前を付けて保存] ダイアログから保存するか、2 番目のダイアログから保存するか、2 番目のダイアログでキャンセルを押すと、すべてが正しく機能します。

private void WordDocument_BeforeClose(object sender, System.ComponentModel.CancelEventArgs e)
{
  try
  {
    this.WordDocument.Save();
  }
  catch (System.Runtime.InteropServices.COMException a)
  {
    log.Error(a.Message);
  }
}

private void WordDocument_Shutdown(Object sender, EventArgs e)
{
  // Parent cleanup.
}
4

1 に答える 1

2

代わりに Document Shutdown イベントを試してください。ドキュメントはこちら

「備考」セクションから:

これは、ドキュメントのアンロード時に呼び出される最後のイベントです。このイベントは、追加のクリーンアップに使用します。

ドキュメント レベルのカスタマイズでは、ドキュメント ホスト項目がシャットダウンすると、アセンブリのアプリケーション ドメインがアンロードされます。

アプリケーション レベルのアドインでは、ドキュメント ホスト項目がシャットダウンしても、アプリケーション ドメインはアンロードされません。また、基になるドキュメント オブジェクトは使用できなくなります。シャットダウンする前にドキュメントにアクセスするには、代わりに CloseEvent を使用します。

于 2012-09-25T17:39:52.367 に答える